ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

agc002 E - Candy Piles

2022-07-13 18:34:46  阅读:132  来源: 互联网

标签:拐角 agc002 Piles 状态 ++ Candy 边界点 往右 空点


题意:

n 堆石子,两个人轮流操作,每次操作可以拿完最多的一堆或者每堆拿一个。拿走最后一个石子的人

\(n\le 1e5,a_i\le 1e9\)

思路:

把 \(a[]\) 从大到小排序。转化一下题中的操作:拿完最多的一堆就是删除最左的那列,就是往右走一步;每堆拿一个就是删除最下的那行,就是往上走一步。画图一直画到没有石子的状态(称为空点),考虑边界点的状态怎么确定(这里认为空点在边界之外):若某点的上、右邻点均为空点,那他就是必败点,在图上这种点位于 “\(\neg\) 形拐角” 处;否则它的状态取决于往上到拐角点和往右到拐角点的距离的奇偶性。

知道了边界点的状态就可以推出其他所有点的状态。但是把所有点都推出来太慢了。实际上每条 左下-右上 45度线上的点的状态都一样。所以只需关心从起点出发一直45度往右上走到的那个边界点是什么状态

void sol() {
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];

    sort(a + 1, a + 1 + n, greater<int>());

    int x = 1, y = 1; while(a[x+1] >= y+1) x++, y++;

    bool s1 = (a[x]-x)%2, s2 = 0;
    while(a[x+1] >= y) x++, s2 ^= 1;

    cout << (s1 || s2 ? "First" : "Second");
}

标签:拐角,agc002,Piles,状态,++,Candy,边界点,往右,空点
来源: https://www.cnblogs.com/wushansinger/p/16474998.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有