NEERC2013 Kabaleo Lite
来源:互联网 发布:网络机顶盒看电视软件 编辑:程序博客网 时间:2024/06/05 18:52
有意思的贪心题。
n=1时特判,只有当最后player的棋子和player_1的胜利棋子是相同的,player_1才能取胜。
剩下的,我们可以看到对于 非player_1的胜利棋子 的棋子 他的任务就是尽量覆盖 player_1的胜利棋子 ,而对于和 player_1的胜利棋子 相同的棋子 在最坏情况下会放在一个位置——自身覆盖。
枚举player_1的覆盖点,计算当前的最多点的棋子数和 player_1的胜利棋子 的数目,严格小于则输出此位置。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int Maxn=1000005;int s[Maxn],n,p,c,h,i,a[Maxn],b[Maxn],dig[Maxn],max1,max2,cnt,ext,ans;bool Judge(int pos){ int k=s[h]-cnt; if (k<=0) k+=ext; return !(s[max1]>=k || s[max2]>=k || (b[1]!=h && s[b[1]]>=k));}int main(){ freopen("kabaleo.in","r",stdin); freopen("kabaleo.out","w",stdout); scanf("%d%d%d%d",&n,&p,&c,&h); for (i=1;i<=n;i++){ scanf("%d",&a[i]);s[a[i]]++; } for (i=1,cnt=p-1;i<=p;i++){ scanf("%d",&b[i]);if (i>1 && b[i]!=h) s[b[i]]++;if (i>1 && b[i]==h) cnt--; } if (n==1){ if (b[p]!=h) printf("0\n"); else printf("1\n1\n"); return 0; } ext=(b[p]==h); for (i=1;i<=c;i++) if (i!=h){if (s[i]>s[max1]) max2=max1, max1=i;else if (s[i]>s[max2]) max2=i; } s[b[1]]++; for (i=1,ans=0;i<=n;i++){ s[a[i]]--; if (Judge(i)) dig[ans++]=i; s[a[i]]++; } printf("%d\n",ans); for (i=0;i<ans;i++) printf("%d\n",dig[i]); return 0;}
0 0
- NEERC2013 Kabaleo Lite
- NEERC2013 HACK PROTECTION
- [Neerc2013]Green Energy(几何)
- ISAPI_Rewrite Lite
- SOAP::Lite
- firebug lite
- SQL Lite
- DIDL-Lite
- jCarousel Lite
- UDP-Lite
- IRC lite
- iconv-lite
- Sql Lite
- lite-server
- TensorFlow Lite
- Photon官方Lite类中Lite Concepts
- Flash Lite 1.1
- Delphi 2006 lite
- spring iBATIS 整合
- VS2010基于DirectShows实现视频预览控件
- Android学习之生命周期
- 【HEVC学习与研究】12.HEVC的高层语法结构
- android开发AIDL实例
- NEERC2013 Kabaleo Lite
- 【HEVC学习与研究】13.NAL unit解码
- Linux系统各种监控命令
- android 利用WakeLock延迟系统深度睡眠
- Android Notificaton
- python获得线程调用函数的返回值
- 《Java虚拟机规范》阅读(二):编译
- poj 3592 Instantaneous Transference 强连通缩点+在DAG上dp求最长路
- windows usb驱动开发