Description

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

Data Constraint

对于60%的数据,1 ≤ N, M, K ≤ 500。
对于100%的数据,1 ≤ N, M, K ≤ 5000。

Solution

显然的博弈问题,因为博弈是我不太熟悉的一个领域,所以这里只是自己的一点见解,有错误请大佬们指出。博弈套路:DP
我们设f[i][j]f[i][j]f[i][j]表示第i个人,取的数字为j的必胜必败状态,0/1;
转移很显然,枚举下一个取的数字l,如果当前的种群和下一个的种群相同,并且下一个有必胜策略,那当前这个也有必胜策略,如果种群不同,下一个有必胜策略,那当前必败。

#include<cstdio>
#include<iostream>
#include<cstring>
#define maxn 5010
#define maxm 5010
#define maxk 5010
using namespace std;
int n,m,k;
int f[maxn*2+maxm][maxm];
int a[maxn*2+maxm],sum[2][maxn*2+maxm];
bool pd(int x)
{for (int i=1;i<=k;++i)if(f[x][i]==1) return true;return false;
}
int main()
{freopen("vode.in","r",stdin);freopen("vode.out","w",stdout);scanf("%d%d%d",&n,&m,&k);int i,j,l,N,now,last;for (i=1;i<=n;++i) scanf("%d",&a[i]);if(m%n) N=m/n+1;else N=m/n;for (i=1;i<=N;++i)for (j=1;j<=n;++j) a[i*n+j]=a[j];N=N*n+n;now=1,last=0;for (i=N-1;i>=1;--i){memset(sum[now],0,sizeof(sum[now]));f[i][m]=0;for (j=m-1;j>=1;--j){if(a[i]!=a[i+1]) if(sum[last][j+1]-sum[last][min(m,j+k)+1]) f[i][j]=0;else f[i][j]=1;if(a[i]==a[i+1])if(sum[last][j+1]-sum[last][min(m,j+k)+1]) f[i][j]=1;else f[i][j]=0;sum[now][j]=sum[now][j+1]+f[i][j];}swap(now,last);}for (i=1;i<=n;++i){if(pd(i)) printf("%d ",a[i]);else printf("%d ",1-a[i]);}
}

【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. 5778. 【NOIP提高A组模拟2018.8.8】没有硝烟的战争

    Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x+1,x ...

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

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

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

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

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

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

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

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

最新文章

  1. 程序员效率低下的35个坏习惯
  2. vue 日期格式化返回指定个数月份_vue过滤器实现日期格式化的案例分析
  3. 【转】浅析task_struct结构体
  4. 【设计模式】适配器模式(Adapter Pattern)
  5. 组图:1976年蒙特利尔奥运会
  6. Atitit doc mng 文档管理总结目录1. 主要几大内容 12. 存储管理 22.1. 一般来说 ,文档存储在IM网盘note邮箱blog wiki等地 22.2. 文档格式与体
  7. oppo鸿蒙系统刷机包下载,OPPO A59st官方固件rom刷机包_OPPO A59st系统升级包下载
  8. 质量功能展开QFD成功案例解析
  9. java实现mysql拦截_在mybatis执行SQL语句之前进行拦击处理实例
  10. moment 计算日期差
  11. java级联_Java构造器:级联调用,调用兄弟构造器
  12. 亮相Google I/O,字节跳动是这样应用Flutter的
  13. 某电商平台数据分析报告(2)
  14. 迪信通机器人_迪信通要做机器人:玩票还是另有深意?
  15. Java EE的几个常用框架简介
  16. 对接塔吉特Target DVS EDI流程
  17. 2022-2027年中国农村网络零售行业市场深度分析及投资战略规划报告
  18. Java-Maven详解
  19. 手把手教你用Python网络爬虫实现上海证券交易所定期报告pdf文件下载(附代码)...
  20. [机器学习与scikit-learn-8]:数据预处理-1-意义与概述

热门文章

  1. 股票实战专题:6000102019一二月分析收盘价绘图
  2. P1156 垃圾陷阱(背包dp)
  3. 用机器学习来提升你的用户增长:第八步,Uplift模型
  4. 智能推荐系统开发中的十大要素
  5. console接口配置登录密码
  6. 360企业版 修改服务器ip,360企业版快速安装部署图文教程
  7. 先进的半导体晶圆清洗技术
  8. Android应用商店——项目介绍
  9. DAY1:尚学堂高琪JAVA(1~20)
  10. 小程序页面生命周期函数