首页 > 其他分享 >[ARC155D] Avoid Coprime Game

[ARC155D] Avoid Coprime Game

时间:2023-10-06 10:11:07浏览次数:33  
标签:10 cnt ARC155D int Avoid Game Coprime

[ARC155D] Avoid Coprime Game

一个暴力思路是直接记录选了哪些 \(a\) 然后转移,但是我们显然没办法将已选择的 \(a\) 的信息用状压全部记录下来。但是你注意到题目中对 \(a\) 的选择有着不错的性质,具体如下:

  • 若确定当前 \(G\),则先前选择的所有 \(a_i\) 均满足 \(G | a_i\)。
  • 若经过若干次操作后已有 \(G | a_i\),则此后我们不再关心 \(a_i\) 的具体值。

这似乎告诉我们,在确定了 \(G\) 的情况下,我们只需记录已选择的 \(G | a_i\) 的个数。进一步,只需记录这样的 \(a_i\) 的个数的奇偶性即可,因为只和当前轮到谁操作有关。同时,在转移时我们可以随心所欲地选择哪些可以令 \(G\) 减小的 \(a_i\) 因为他们在先前从未被选择。

这就导出了一个状态数 \(O(n)\) 的 DP。设 \(f_{i,0/1}\) 表示当前 \(G=i\),此时轮到哪个人操作。转移有两类:

  • 若存在 \(j | i\) 使得存在 \(\gcd(i,a_k) = j\),则 \(f_j\) 可转移至 \(f_i\)。
  • 若 \(i\) 的所有后继状态皆为必败态,则两人一直取 \(i\) 的倍数,最终胜者可根据 \(i\) 倍数个数的奇偶性决定。

最后,我们只需解决这样一个问题:对 \((i,j)\) 判断是否存在 \(a_k\) 使得 \(\gcd(i, a_k) = j\)。考虑若 \(j = i\) 则就是一个狄利克雷后缀和。对于 \(j < i\) 的情况会多算 \(j\) 的倍数,那么在计算的过程中容斥掉即可。最终复杂度是两个调和级数的 \(O(N \log^2 N)\)。

const int N = 2e5;
int n, a[N + 10], cnt[N + 10];
int f[N + 10][2], buc[N + 10];
vector<int> v[N + 10];

int main() {
  read(n);
  for(int i = 1; i <= n; ++i)
    read(a[i]), ++cnt[a[i]];
  for(int i = 2; i <= N; ++i)
    for(int j = i; j <= N; j += i) {
      v[j].emplace_back(i);
      if(j > i) cnt[i] += cnt[j];
    }
  for(int i = 2; i <= N; ++i) {
    for(int x : v[i])
      buc[x] = cnt[x];
    int flag = false;
    for_each(v[i].rbegin(), v[i].rend(), [&](int x) {
      if(x != i && buc[x]) {
        if(!f[x][0]) flag = f[i][1] = true;
        if(!f[x][1]) flag = f[i][0] = true;
      }
      for(int y : v[x])
        buc[y] -= buc[x];
    });
    if(!flag) f[i][cnt[i] % 2] = true;
  }
  for(int i = 1; i <= n; ++i)
    puts(f[a[i]][0] ? "Aoki" : "Takahashi");

标签:10,cnt,ARC155D,int,Avoid,Game,Coprime
From: https://www.cnblogs.com/DCH233/p/17744281.html

相关文章

  • CodeForces 814E An unavoidable detour for home 题解
    更好的阅读体验题意题目链接(洛谷翻译)给出\(n\)个点,和每个点的度\(d_i\)让你构造出一张无向图满足以下两条性质:点\(1\)到点\(i\)仅有唯一一条最短路。点\(1\)到点\(i\)的最短路长度大于等于点\(1\)到点\(i-1\)的最短路长度。求能构成满足条件的无向图......
  • gameofmir引擎白手版跟商业版的区别
    1商业版自定义界面功能可以保存配置2商业版登录器支持读取二次加密的Pak。需购买Pak二次加密工具。3商业版增加数字证书,防止杀毒软件误报4商业版支持163博客远程列表,列表首尾需$BEGIN$END关键字5商业版支持聊天框背景颜色自定义6商业版支持新技能纵横剑术、十步一杀、冰镰术、冰......
  • [CF1854E] Game Bundles
    题目描述Rishiisdevelopinggamesinthe2Dmetaverseandwantstooffergamebundlestohiscustomers.Eachgamehasanassociatedenjoymentvalue.Agamebundleconsistsofasubsetofgameswhosetotalenjoymentvalueaddsupto$60$.Yourtaskistoc......
  • AtCoder Grand Contest 056 D Subset Sum Game
    洛谷传送门AtCoder传送门考虑若\(n\)是奇数怎么做。枚举Alice第一次选的数\(a_i\),然后考虑把剩下的数两两结成一个匹配,若Bob选了其中一个,Alice就选另一个。容易发现排序后奇数位和它右边的偶数位匹配最优。那么设奇数位的和为\(A\),偶数位的和为\(B\),此时Alice获胜......
  • CF1875B Jellyfish and Game
    思路题意大概是两人都有一组数,奇数轮,第一个人可以选择和第二个人交换一个数字也可以不换,偶数轮,第二个人可以选择和第一个人交换一个数字也可以不换。首先可以猜测,我们每次都应该选择交换对方的最大值和自己的最小值,如果自己的最小值都比对方大的话就不交换。应该比较好想,这里感......
  • UTPC 2021 L Maze Game
    洛谷传送门AtCoder传送门若图中存在点使得删去它后\(S,T\)不连通,那么A可以一步获胜。否则,双方都不会删去一个点使得删去它后会产生一个点使得删去它后\(S,T\)不连通。那么到最后图上会剩下两条\(S\toT\)的不交路径。此时一方无论如何操作都会使得另一方获胜。因......
  • Galgame封包逆向入门
    Galgame封包逆向入门这里就简单聊一下封包逆向分析的一些注意点吧,其实也是初入逆向的注意点了,本质差不多。正向基础语言基础:ASM、C、C++平台基础:Win32、PE、GDI、DirectX引擎基础:游戏引擎架构虽然说的逆向,其实和正向的水平、见识、经验是强相关的,如果你没写过相关的程序又......
  • GameFi链游系统开发应用
      GameFi软件的开发是结合了区块技术,它是将游戏的元素移动到上链上,让游戏变得独立,这就符合了用户的娱乐方式。该软件项目还具有一定的投资价格,GameFi系统开发的应用可以带来更多的创新和价值。  GameFi的软件开发应用程序是让用户更好的管理自己的资产,有助于游戏的稳定,持......
  • CF1882C Card Game
    某种程度上的抽卡游戏?有这样一个结论:一个后缀中\([i+1,n]\)中所有的正数都可以被取到,所以维护一个正数后缀和\(s_i\),枚举每个位置\(i\),如果\(i\)为奇数,答案对\(a_i+s_{i+1}\)取\(\max\),否则对\(s_{i+1}\)取\(\max\)。下面证明这个结论:先依次取掉\([i+1,n]\)中的奇......
  • react native 使用 KeyboardAvoidingView 无效
    组件介绍:该组件将根据键盘高度自动调整其高度、位置或底部填充,以在显示虚拟键盘时保持可见。官方文档:KeyboardAvoidingView文档地址遇到的问题:KeyboardAvoidingView标签要设置behavior={Platform.OS==="ios"?"padding":"height"},iOS系统要使用padding否则样式可能......