神仙题。。表示自己智商不够想不到。。。

好几次读成最后拿的赢了,导致一直没看懂题解。。。

题目链接: https://atcoder.jp/contests/agc002/tasks/agc002_e

题解: 首先所有数从大到小排序,如果把每个数上面画出高度等于它数值的柱状图,那么就可以得到一条从左上角走到右下角的Lattice Path, 两人从原点开始每一步操作就相当于向右或向上走一格,走到边界的输。

那么朴素的DP是\(O(\sum a_i)\)的,考虑优化: 找规律可得从一个不在边界上的点每次往斜下方走一格,那么走的路径上的胜负状态都一样。所以可以从原点走到离边界恰好一格的地方。只需要求这个地方的胜负状态。

如果这里为先手必败,那么其上方和右侧均为先手必胜。找规律可得一个横着或者竖着的边界,边界上全为胜,边界的内部一格胜负交替,因此根据奇偶性可以判断。

很抱歉没有图片我也讲不太清楚,可以参考官方题解的图片。

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cassert>
#include<algorithm>
#include<vector>
using namespace std; const int N = 4e5;
int a[N+3];
int d[N+3];
int dp[N+3][10];
vector<int> b;
int n; bool cmp(int x,int y) {return x>y;} int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++) scanf("%d",&a[i]);
sort(a+1,a+n+1,cmp);
int pos = 0;
for(int i=1; i<=n; i++)
{
if(a[i]>=i && a[i+1]<=i) {pos = i; break;}
}
// printf("pos=%d\n",pos);
int len1 = 0;
for(int i=pos+1; i<=n; i++) {if(a[i]>pos-1) len1++;}
int len2 = a[pos]-pos;
// printf("len1=%d len2=%d\n",len1,len2);
if((!(len1&1)) && (!(len2&1))) printf("Second");
else printf("First");
return 0;
}

最新文章

  1. [LeetCode] Sort List 链表排序
  2. 老生长谈的$.extend()方法
  3. Sunny-ngrok 解决外网访问内网问题
  4. com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files
  5. interface
  6. Css Study - 纵向Menu - By html and Css
  7. C# 特性详解
  8. SSL certificate problem unable to get local issuer certificate解决办法
  9. [Angular 2] Generate Angular 2 Components Programmatically with entryComponents &amp; ViewContainerRef
  10. 【HDOJ】3473 Minimum Sum
  11. LiangNa Resum
  12. Sereja and Suffixes
  13. Python 函数传递list,传递dict 以及*args和**kargs
  14. FragmentPagerAdapter与FragmentStatePagerAdapter差异
  15. ab -n -c
  16. 乘积最大洛谷p1018
  17. 找不到javax.servlet.Filter类,
  18. mybatis快速入门(四)
  19. spring mvc controller中的参数验证机制(二)
  20. Mac 自带的Apache php 狼神的

热门文章

  1. C++中的自定义内存管理
  2. java按值传递?
  3. php点击链接直接下载文件写法
  4. Codeforces 1220D. Alex and Julian
  5. django 实现 Mock Server
  6. myql命令行乱码问题,以及设置数据库编码
  7. vue中出现 There are multiple modules with names that only differ in casing的问题
  8. Hash介绍
  9. Kong组件构成及使用
  10. pikachu-xss和csrf