首页 > 其他分享 >HDU 2999 Stone Game, Why are you always there?

HDU 2999 Stone Game, Why are you always there?

时间:2024-08-16 10:49:31浏览次数:16  
标签:2999 HDU there int always 石子 vis sg

题目链接:HDU 2999【Stone Game, Why are you always there?】



思路

       由于只能取连续的一段石子,当取出的石子是这段石子的中间一部分时就相当于将一段石子分成两段石子,简单异或一下求SG值就行了


代码

int sg[N], vis[N], a[N];
int n, m, k;

void getsg() {
  memset(sg, 0, sizeof sg);
  memset(vis, 0, sizeof vis);
  for (int i = 1; i <= 1000; i++) {
    for (int j = 1; a[j] <= i && j <= n; j++) {
      for (int k = 0; k <= i - a[j]; k++)
	//枚举从这一段的哪一个石子开始取连续的a[j]个棋子
        vis[sg[k] ^ sg[i - a[j] - k]] = i; 
    }
    while (vis[sg[i]] == i) {
      sg[i]++;
    }
  }
}

int main() {
  while (~scanf("%d", &n)) {
    for (int i = 1; i <= n; i++) {
      a[i] = read();
    }
    sort(a + 1, a + 1 + n);
    getsg();
    m = read();
    while (m--) {
      k = read();
      if (sg[k])
        puts("1");
      else
        puts("2");
    }
  }
  return 0;
}

标签:2999,HDU,there,int,always,石子,vis,sg
From: https://www.cnblogs.com/againss/p/18362460

相关文章

  • HDU-ACM 2024 Day3
    T1004游戏(HDU7460)注意到对于两个人,他们\(t\)轮后能力值相同的概率只与他们初始时的能力差有关,所以我们先\(\text{FFT}\)求出\(|a_i-a_j|=k\)的\((i,j)\)对数。构造多项式\(F(x)=(p_1x^2+p_2+p_3x)\),其中\(p_1,p_2,p_3\),分别表示在一轮中两个人相对......
  • hdu7462-字符串【SAM,二分】
    正题题目链接:https://acm.hdu.edu.cn/showproblem.php?pid=7462题目大意你有一个由\(a,b\)组成的字符串\(s\)。有\(m\)个操作:询问有多少个本质不同的串\(t\)使得\(s[l,r]\)是\(t\)的子串且两个串在\(s\)中的出现次数相同。询问有多少个本质不同的串\(t\)......
  • [题解 hduoj-7522] 2024HDU 暑假多校7 - cats 的最小生成树
    原题链接题意有一个有重边的无向图,每次找到它的最小生成树,并删除生成树的边,直到不存在最小生成树,问被每条边在第几次被删除.思路考虑用类似Kruskal算法,但是是遍历一遍所有边,同时处理出来所有的生成树.具体这样做:如Kruskal一样,把所有边按边权排序,......
  • HDU 不要62 题解
    题目传送门思路数位dp数位dp数位dp模版题。依次考虑每一位,满足题目给出的限制,统计数量,是一些较简单的数位dp题目的过程。数位dp运用了差分的思想,即求\(ans(l-r)\)的答案用\(ans(1-r)-ans(1-(l-1))\)来表示.对于本题,我们需要满足的性质很简单:使数不超......
  • HDU-ACM 2024 Day2
    T1004a*bproblem(HDU7448)不会。T1005小塔的养成游戏之梦(HDU7449)不会。T1009强攻计策(HDU7453)容易发现初始速度是多少对答案没有影响,所以我们默认初始速度为\(0\)。题意相当于在平面直角坐标系上(横轴为时间,纵轴为速度),有一个目标高度,维护一条尽量接近目标的直线,但......
  • HDU6567 Cotree
    题意有两颗树,在每棵树中选择一个结点并将它们两相连使得对于新的树的任意两点的距离总和最小。思路设\(sz[u]\)表示子树\(u\)的大小。显然,将两数重心连接结果最优秀(根据树的重心定义)。对于每条边,取它两端\(sz\)较小的那一个点\(u\),那么这条边贡献为\(sz[u]*(n-sz......
  • 2024HDU 6th
    T1显然我们选择的点度数为2。考虑若答案为Yes,则原图最多有5个度数为2的点。多于5个直接判为No。因此可以枚举所有度数为2的点,暴力判断以该点为根,两个儿子的子树是否为菊花图。这是简单的,因为树为菊花图当且仅当点数不超过2或者一度点的个数等于点数-1。时间复杂度\(O(n)\)。......
  • HDU 多校 2024 Round 2
    A-鸡爪肯定是希望\(1,2,3\)的度数尽可能多。考虑答案一定是\(\lfloor\dfrac{n}{3}\rfloor\),所以把前面\(1\sim\lfloor\dfrac{n}{3}\rfloor\)都作为鸡爪的中心,并且向\(1,2,3\)连边。剩下一些再连到\(1,2\)上面去。B-梦中的地牢战斗建分层图跑最长路,由于没有正环,所......
  • HDU-ACM 2024 Day1
    T1009数位的关系(HDU7441)考虑\(l=r\)的情况,此时只要计算一个数字,我们将其展开为一个字符串\(S\)。设\(f_{i,j,k}\)表示考虑了\(S\)的前\(i\)位,选出了\(j\)个数字加入子序列,最后一个加入子序列的数字是\(k\)的方案数,转移平凡。拓展到\(l\neqr\),经典地将答......
  • HDU多校-交通管控
    Problem-7498(hdu.edu.cn)直接dfs显然不行,达到了2^500,那么我们可以考虑枚举所有红绿灯的状态,总共有三种状态,k的范围小于等于10,因此所有状态数为3^10不会超,所以通过三进制状压dp即可完成,(这道题目比较卡时间,#defineintlonglong去掉)dp开二维,第一维记录前一种状态,第二维记......