首页 > 其他分享 >[AGC048D] Pocky Game

[AGC048D] Pocky Game

时间:2023-05-17 21:56:58浏览次数:37  
标签:ch int void 石子 Pocky AGC048D read Game isdigit

[AGC048D] Pocky Game

这题第一印象可想到一个辛苦暴力。设 \(f_{l,r,x,y}\) 表示取到 \([l,r]\) 区间,第 \(l\) 堆石子为 \(a_l\),第 \(r\) 堆石子为 \(a_r\)。很快抛弃从这里入手的想法。

观察一下性质,不难得到一个经典结论:先手所取的石子堆中石子越多越好。这是因为取的石子个数无限制。

这样我们可以把操作按照有没有取完一堆石子分为两类,很显然每次要么取完一整堆石子,要么只取一颗石子。

手玩。感觉过程是先后手依次只取一个,到达某个临界状态后一次取完一堆。这启发我们直接按照还剩哪些石子堆来划分状态。设 \(f_{l,r}\) 表示还剩 \([l,r]\),要令先手获胜,第 \(l\) 堆石子的最小值,为转移再对称地设 \(g_{l,r}\) 表示后手的类似值。就可以 \(O(n^2)\) 做了。

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

namespace IO {
  #define isdigit(x) (x >= '0' && x <= '9')
  template<typename T>
  inline void read(T &x) {
    x = 0; char ch = getchar(); int f = 0;
    for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;
    for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
    if(f) x = -x;
  }
  template<typename T>
  inline void write(T x) {
    if(x < 0) putchar('-'), x = -x;
    if(x > 9) write(x / 10);
    putchar(x % 10 + '0');
  }
  #undef isdigit
}
using namespace IO;

const int N = 110;
LL n, a[N];
LL f[N][N], g[N][N];

void solve() {
  read(n);
  for(int i = 1; i <= n; ++i)
    read(a[i]), f[i][i] = g[i][i] = 1;
  for(int i = 2; i <= n; ++i)
    for(int l = 1; l + i - 1 <= n; ++l) {
      int r = l + i - 1;
      f[l][r] = (a[r] < g[l + 1][r]) ? 1 : (f[l][r - 1] + a[r] - g[l + 1][r] + 1);
      g[l][r] = (a[l] < f[l][r - 1]) ? 1 : (g[l + 1][r] + a[l] - f[l][r - 1] + 1);
    }
  puts(a[1] >= f[1][n] ? "First" : "Second");
}

int main() {
  int T; read(T);
  while(T--) solve();
}

标签:ch,int,void,石子,Pocky,AGC048D,read,Game,isdigit
From: https://www.cnblogs.com/DCH233/p/17410442.html

相关文章

  • CF1183C Computer Game 题解
    ComputerGame还算水的一道题。题意本题意为题面直接翻译的简化版,可能会比题目翻译要复杂。有\(q\)次询问,每次给出四个数,表示一开始的电亮为\(k\),有\(n\)个回合,不插电玩一个回合则电量会减少\(a\),插电玩一个回合则电量会减少\(b\),电量在任何时刻都必须严格大于\(0\)......
  • 雨中冒险2 按键未绑定 鼠标无法移动镜头 解决方案 Risk of Rain 2 NO GAMEPAD BINDIN
    兄弟萌,检查你的.xml用户配置文件一般在这个目录下Steam\userdata\385903137\632360\remote\UserProfiles然后用记事本或者vscode等工具打开,还原这三个配置UserProfile>joystickMap,keyboardMap,mouseMap如果没有备份过,那可以试试我的。不要将内容换行! checkyour.xmluse......
  • CF1527E, Partition Game
    题意定义一个数组的\(cost\)为数组中出现过的每个元素的最后一个位置减第一个位置。\[cost(array)=\sum_{x\inset(array)}last(x)-first(x)\]给定一个\(N\)个数的数组\(A\),将其分为\(K\)段,求最小\(cost\)。题解设\(dp_{i,j}\)为前\(i\)个数分为\(j\)段的......
  • GAMES101 VS2019 2022环境配置
    GAMES101VS20192022环境配置Eigen库的配置在官网https://eigen.tuxfamily.org/index.php?title=Main_Page中下载Eigen库的zip格式。将压缩包解压为eigen3同时解压到指定路径,我这里为D:\include\eigen3。使用VS2019创建一个空项目,将代码框架的头文件和源文件加入到项......
  • [HGAME 2022 week1]easyasm
    查壳:64位,进IDA:好家伙,不给看伪代码,来吧汇编走起:设置两个段,一个数据段(dseg),一个额外段(seg001)看看吧,dseg段中的内容'hgame{Fill_in_your_flag}'seg001段中的内容:(不想说话)关键:逐个分析吧,首先是将ax清零,然后从数据段中拿出数据,向左偏移4,压入栈中,再清零ax,再从数据段中拿出......
  • AIGC生产工艺流程之games生产流程
    AIGC生产工艺流程中的“games生产流程”主要是指游戏的生产过程。一般来说,游戏生产流程包括游戏设计、策划、程序开发、美术制作、音效制作等等环节,具体流程可以根据不同公司和项目有所差异。其中游戏设计一般是一个较为重要的环节,主要确定游戏的整体架构和玩法规则;策划环节是根据......
  • Codeforces 280C Game on Tree
    设\(p_i\)为\(i\)涂色或不涂色,\(1\)为涂,\(0\)为不涂,答案即为\(E[\sum_{i=1}^np_i]\)然后转化一下柿子:\(\sum_{i=1}^nE[p_i]\),这就很好求了,单独求每个点\(E[p_i]\)的值就行了考虑对于\(u\)点,\(p_u=1\),即能被涂需要满足其祖先都比其晚涂色假设现在有一个序列里面......
  • AtCoder Regular Contest 122 D XOR Game
    洛谷传送门AtCoder传送门从高到低按位考虑。设当前位有\(k\)个\(1\)。如果\(k\bmod2=0\),这意味着Alice如果选了一个数,Bob可以选相同的数。发现可以分成\((0,0),(1,1)\)两组,递归下去即可。如果\(k\bmod2=1\),意味着答案这一位一定是\(1\)(因为无论如何都不......
  • J - Simple Game (博弈论外壳下的模运算考察题目)
    原题链接:https://vjudge.net/contest/555710#problem/J手工翻译:Alice和Bob在玩一个游戏有这样一个数列a1,a2,a3,a4……an长度为n,他们轮流移走一个整数当数列中没有可移走的整数时游戏结束,Alice移走的数的和是S1,Bob移走的数的和是S2如果abs(s1-s2)为奇数,Alice赢,否则Bob赢接下来给......
  • AtCoder Regular Contest 116 F Deque Game
    洛谷传送门AtCoder传送门很强的博弈+性质题。下文令A为Takahashi,B为Aoki。发现单独考虑一个序列\(a_1,a_2,...,a_n\):若\(n\bmod2=0\):若A为先手,答案为\(\max(a_{\frac{n}{2}},a_{\frac{n}{2}+1})\);若B为先手,答案为\(\min(a_{\frac{n}{2}},a_{\frac......