辣椒炸弹
来源:互联网 发布:网络金融股 编辑:程序博客网 时间:2024/04/26 03:16
【题目描述】
植物大战僵尸这款游戏中,有一种植物武器叫辣椒炸弹,在草坪中的任意一格摆放它可以把草坪中该行上的所有僵尸瞬间消灭,也就是说,如果在第i行中任意位置摆放一个炸弹,第i行中的所有僵尸就瞬间都被杀死了。现在我们假定草坪有r行c列,草坪中有n只僵尸,僵尸不移动,现在给你k个樱桃炸弹,要求只能使用这k个炸弹来消灭这些僵尸,请问最多可以杀死多少只僵尸。
【输入格式】
第一行4个正整数r,c,k,n;
接下来n行,每行两个正整数x,y,表示第x行的第y列中有一只僵尸。
【输出格式】
第一行输出最多可以杀死的僵尸数;
第二行按顺序输出所有被消灭的行,如果有不同方案,输出字典序最小的那种方案。
【输入样例】
4 5 2 6
1 3
2 3
3 1
4 4
4 5
4 5
【输出样例】
4
1 4
【数据规模】
对于30%数据:0<r,c≤50, n≤2500;
对于100%数据:0<r,c≤1000, n≤1000000,k≤r。
【分析】
打上标记,排序即可。
#include<cstdio>#include<algorithm>using namespace std;struct Edge{ int sum,id;}book[1000010];int sort_id[1010];bool cmp(Edge x,Edge y){ if (x.sum>y.sum) return true; if (x.sum==y.sum && x.id<y.id) return true; return false;}int main(){ int r,c,k,n,x,y; scanf("%d%d%d%d",&r,&c,&k,&n); for (int i=1;i<=n;i++){ scanf("%d%d",&x,&y); book[x].sum++; } for (int i=1;i<=r;i++) book[i].id=i; sort(book+1,book+1+r,cmp); int ans=0; for (int i=1;i<=k;i++) ans+=book[i].sum; printf("%d\n",ans); for (int i=1;i<=k;i++) sort_id[i]=book[i].id; sort(sort_id+1,sort_id+1+k); for (int i=1;i<=k;i++) printf("%d ",sort_id[i]);}
3 0
- 辣椒炸弹
- 辣椒
- 辣椒
- 炸弹
- 炸弹
- 炸弹
- 炸弹
- 炸弹
- 吃辣椒?
- 辣椒发芽
- 虎皮辣椒三式
- 怎样使猫吃辣椒
- 年夜饭之 -- 辣椒炒圣子
- 小辣椒使用笔记
- 辣椒的美容功效
- 辣椒炒鸡
- 辣椒回锅肉、水煮鱼片
- 福建辣椒王鉴别
- Linux-使用 Find 命令找到那些需要清理的文件
- 寒假集训日常!
- 飞机大战
- BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊
- Swift 学习笔记 [2] 类 结构体 枚举
- 辣椒炸弹
- C# Timer
- 从尾到头打印链表
- 51nod 1274 最长递增路径【dp】
- [bigdata-027] 最好用的 python+mysql的包:pymysql
- SpringMVC @ResponseStatus 的用法
- 存储器层次结构
- OpenCV入门教程(7)-图像文件的读取和存储
- 开关灯问题两种解决方法