5778. 【NOIP提高A组模拟2018.8.8】没有硝烟的战争
Description
该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x+1,x+K]区间的整数,游戏按顺时针方向进行。每只动物报的数字都不能超过M。若一只动物报了M这个数,它所在的种族就输了。问以第i只动物为游戏的开始,最后哪种动物会赢?
Input
接下来一行N个正整数,分别表示N只动物的种类,以顺时针的方向给出。0代表羊,1代表狼。
Output
Solutions
我们可以设 dp[i][j]=0/1 来表示第 i 只动物报的数字是 j,是否有必胜策略。
0 表示没有必胜策略,1 表示有。
边界条件就是 dp[][m]=0 Dp[i][j]怎么求?
假如 i 和 i+1 是同一个种群,那么只需要判断 dp[i+1][j+1…j+k]是否存在必胜策略,如果存在,那么 dp[i][j]=1.
同样的,假如 i 和 i+1 不是同一个种群,那么只需要判 断 dp[i+1][j+1…j+k]是否存在必胜策略,如果存在,那 么 dp[i][j]=0.
判断 dp[i+1][j+1…j+k]是否存在必胜策略,只需要用一 个后缀和辅助即可。
然后对于每一个动物,你只需要知道,dp[i][1…k]是否 有必胜策略就行了。
代码
1 var 2 n,m,k:longint; 3 a:array [0..5001] of longint; 4 f,ans:array [0..5001,0..5001] of longint; 5 function min(o,p:longint):longint; 6 begin 7 if o<p then exit(o); 8 exit(p); 9 end; 10 11 procedure init; 12 var 13 i:longint; 14 begin 15 readln(n,m,k); 16 for i:=1 to n do 17 read(a[i]); 18 end; 19 20 procedure main; 21 var 22 i,j,l:longint; 23 begin 24 fillchar(f,sizeof(f),0); 25 for j:=m-2 downto 0 do 26 for i:=1 to n do 27 begin 28 l:=i+1; 29 if l>n then l:=1; 30 if a[l]=a[i] then 31 begin 32 if ans[l,j+1]-ans[l,min(j+k,m-1)+1]>0 then 33 f[i,j]:=1; 34 end else 35 begin 36 if ans[l,j+1]-ans[l,min(j+k,m-1)+1]<min(j+k,m-1)-(j+1)+1 then 37 f[i,j]:=1; 38 end; 39 ans[i,j]:=ans[i,j+1]+f[i,j]; 40 end; 41 end; 42 43 procedure print; 44 var 45 i:longint; 46 begin 47 for i:=1 to n do 48 if f[i,0]=1 then write(a[i],' ') 49 else write(a[i] xor 1,' '); 50 end; 51 52 begin 53 assign(input,'vode.in'); 54 assign(output,'vode.out'); 55 reset(input); 56 rewrite(output); 57 init; 58 main; 59 print; 60 close(input); 61 close(output); 62 end.
转载于:https://www.cnblogs.com/zyx-crying/p/9445587.html
5778. 【NOIP提高A组模拟2018.8.8】没有硝烟的战争相关推荐
- 5814. 【NOIP提高A组模拟2018.8.14】 树(期望 + 倍增)
5814. [NOIP提高A组模拟2018.8.14] 树 Problem 给定一棵nnn个点的树,m" role="presentation">mmm次询问,每次 ...
- JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树
梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...
- JZOJ 5820. 【NOIP提高A组模拟2018.8.16】 非法输入
Description 在算法竞赛中,题目一般保证了输入数据的合法性.然而在工程开发中,我们往往不期望程 序得到的输入都是合法的. D 君正忙着向校内 OJ 添加题目,在写了第 233 个 val.c ...
- 5817. 【NOIP提高A组模拟2018.8.15】 抄代码
Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...
- 5819. 【NOIP提高A组模拟2018.8.15】 大逃杀
Description 自从 Y 君退役之后,她就迷上了吃鸡,于是她决定出一道吃鸡的题. Y 君将地图上的所有地点标号为 1 到 n,地图中有 n − 1 条双向道路连接这些点,通过一条 双向道路需要 ...
- jzoj5814 【NOIP提高A组模拟2018.8.14】 树 (树上期望,递归法列方程)
题面 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择一条 ...
- JZOJ5814. 【NOIP提高A组模拟2018.8.14】 树
Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...
- 5814. 【NOIP提高A组模拟2018.8.14】 树
题目描述 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择 ...
- jzoj5814 [NOIP提高A组模拟2018.8.14] 树 树形dp
Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...
最新文章
- 如何配置Linux的时钟同步
- java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处
- linuv创建文件的命令_ECS实践案例丨逻辑卷的创建和扩容操作指导
- 方法的绑定机制-静态绑定和动态绑定
- Qt4_在次线程中使用Qt的类
- [C++]面向对象部分——类
- mysql内存淘汰_mysql内存数据淘汰机制和大查询会不会把内存打爆?
- 主存空间的分配和回收实验报告
- 强制开启android webview debug模式使用Chrome inspect
- 迁移学习——Balanced Distribution Adaptation for Transfer Learning
- 牛客网刷题java之变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- 最小生成树(库鲁斯卡尔算法)
- 一个工厂有m条流水线
- 4.6有一个函数。 写程序,输入x的值,输出相应的y值
- echarts 自定义tooltip显示图例颜色
- 跨时钟域同步-结绳法
- 效能评估指标体系构建
- 电路硬件设计——PCB布局和布线
- 胡适最著名演讲:天下没有白费的努力!
- PS抠图——究其奥义!