Description

被污染的灰灰草原上有羊和狼。有N只动物围成一圈,每只动物是羊或狼。
该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x+1,x+K]区间的整数,游戏按顺时针方向进行。每只动物报的数字都不能超过M。若一只动物报了M这个数,它所在的种族就输了。问以第i只动物为游戏的开始,最后哪种动物会赢?

Input

第一行输入三个正整数N,M,K。
接下来一行N个正整数,分别表示N只动物的种类,以顺时针的方向给出。0代表羊,1代表狼。

Output

一行输出N个整数,表示若从第i只动物开始,赢的动物的种类。同上,0代表羊,1代表狼。
 
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】没有硝烟的战争相关推荐

  1. 5814. 【NOIP提高A组模拟2018.8.14】 树(期望 + 倍增)

    5814. [NOIP提高A组模拟2018.8.14] 树 Problem 给定一棵nnn个点的树,m" role="presentation">mmm次询问,每次 ...

  2. JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树

    梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...

  3. JZOJ 5820. 【NOIP提高A组模拟2018.8.16】 非法输入

    Description 在算法竞赛中,题目一般保证了输入数据的合法性.然而在工程开发中,我们往往不期望程 序得到的输入都是合法的. D 君正忙着向校内 OJ 添加题目,在写了第 233 个 val.c ...

  4. 5817. 【NOIP提高A组模拟2018.8.15】 抄代码

    Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...

  5. 5819. 【NOIP提高A组模拟2018.8.15】 大逃杀

    Description 自从 Y 君退役之后,她就迷上了吃鸡,于是她决定出一道吃鸡的题. Y 君将地图上的所有地点标号为 1 到 n,地图中有 n − 1 条双向道路连接这些点,通过一条 双向道路需要 ...

  6. jzoj5814 【NOIP提高A组模拟2018.8.14】 树 (树上期望,递归法列方程)

    题面 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择一条 ...

  7. JZOJ5814. 【NOIP提高A组模拟2018.8.14】 树

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

  8. 5814. 【NOIP提高A组模拟2018.8.14】 树

    题目描述 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择 ...

  9. jzoj5814 [NOIP提高A组模拟2018.8.14] 树 树形dp

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

最新文章

  1. 如何配置Linux的时钟同步
  2. java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处
  3. linuv创建文件的命令_ECS实践案例丨逻辑卷的创建和扩容操作指导
  4. 方法的绑定机制-静态绑定和动态绑定
  5. Qt4_在次线程中使用Qt的类
  6. [C++]面向对象部分——类
  7. mysql内存淘汰_mysql内存数据淘汰机制和大查询会不会把内存打爆?
  8. 主存空间的分配和回收实验报告
  9. 强制开启android webview debug模式使用Chrome inspect
  10. 迁移学习——Balanced Distribution Adaptation for Transfer Learning
  11. 牛客网刷题java之变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
  12. 最小生成树(库鲁斯卡尔算法)
  13. 一个工厂有m条流水线
  14. 4.6有一个函数。 写程序,输入x的值,输出相应的y值
  15. echarts 自定义tooltip显示图例颜色
  16. 跨时钟域同步-结绳法
  17. 效能评估指标体系构建
  18. 电路硬件设计——PCB布局和布线
  19. 胡适最著名演讲:天下没有白费的努力!
  20. PS抠图——究其奥义!

热门文章

  1. plt.rcParams(可解决matplotlib无法显示中文和负号的问题)
  2. 2.认识思科设备连接有线和无线练习题
  3. 现代几何学的次序公理
  4. 安卓手机麦克风测试应用开发
  5. 基于颜色布局描述符(CLD)图像特征提取算法使用Python实现简单的人脸检测功能并使用PyQt5构建简单的功能界面(数字图像处理课程实验)
  6. 史蒂夫·鲍尔默关于.NET平台的讲演
  7. 云存储服务的可用性——从又拍网看云存储服务
  8. C#作为游戏脚本的目录结构
  9. 9.python控制双目摄像头自动拍照
  10. WEB安全:浅谈输入验证