zoukankan      html  css  js  c++  java
  • 洛谷 P3480 [POI2009]KAM-Pebbles

    https://www.luogu.org/problemnew/solution/P3480

    讲不清楚。。。

    首先对原序列做差分;设原序列为a,差分序列为d

    那么,每一次按题意在原序列位置i处取走石子x个,相当于在差分序列的位置i处拿石子x个到位置i+1处(要求差分序列任意元素始终非负)(如果i=n那么抛弃这x个石子)

    如果抽离出所有与n奇偶性相同的i,得到d[i]形成序列,对于nim游戏满足后手必胜,对于后手一方,如果对方上一次操作了位置i,有如下应对策略:

    1.对于所有与n奇偶性不同的位置i,如果对方从d[i]处移动x个到d[i+1]处,则自身就从d[i+1]处移动x个到d[i+2]处;

    2.对于所有与n奇偶性相同的位置i,将这些位置抽离出来,单独形成序列,用nim游戏的策略去做就行了,因为每一次从d[i]移动x个到d[i+1],d[i+1]并没有在抽离出的序列里,对于对方进行的所有方式1的移动,又可以用以上策略消去其对抽离出序列构成的影响

    因此,抽离出所有与n奇偶性相同的i,得到d[i]形成序列,那个nim游戏的结果就是该游戏的结果

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 int n,a[100100],b[100100];
     5 int main()
     6 {
     7     int T,i,t;
     8     scanf("%d",&T);
     9     while(T--)
    10     {
    11         scanf("%d",&n);
    12         for(i=1;i<=n;i++)    scanf("%d",&a[i]),b[i]=a[i]-a[i-1];
    13         t=0;
    14         for(i=n;i>=1;i-=2)    t^=b[i];
    15         puts(t?"TAK":"NIE");
    16     }
    17     return 0;
    18 }
  • 相关阅读:
    AOJ 2200 Mr. Rito Post Office
    poj 3259 Wormholes
    01背包求解组合最值问题
    01背包求解面值组成问题
    金明的预算方案
    追赶法
    有关动态规划的一些定理。。。。。
    4980
    并查集
    快速幂
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9092093.html
Copyright © 2011-2022 走看看