zoukankan      html  css  js  c++  java
  • 洛谷P2599||bzoj1413 [ZJOI2009]取石子游戏

    bzoj1413

    洛谷P2599

    根本不会啊。。。

    看题解吧

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 using namespace std;
     6 #define fi first
     7 #define se second
     8 #define mp make_pair
     9 #define pb push_back
    10 typedef long long ll;
    11 typedef unsigned long long ull;
    12 typedef pair<int,int> pii;
    13 int T;
    14 int n;
    15 int a[1010];
    16 int lft[1010][1010],rht[1010][1010];
    17 //[l,r]区间左侧加/右某个元素使得成为必败态
    18 int main()
    19 {
    20     int i,l,r,t1,t2,x;
    21     scanf("%d",&T);
    22     while(T--)
    23     {
    24         scanf("%d",&n);
    25         for(i=1;i<=n;++i)
    26             scanf("%d",a+i);
    27         if(n==1)
    28         {
    29             printf("%d
    ",1);
    30             continue;
    31         }
    32         if(n==2)
    33         {
    34             printf("%d
    ",int(a[1]!=a[2]));
    35             continue;
    36         }
    37         for(i=1;i<=n;++i)
    38             lft[i][i]=rht[i][i]=a[i];
    39         for(i=2;i<=n;++i)
    40         {
    41             for(l=1;l<=n-i+1;++l)
    42             {
    43                 r=l+i-1;
    44                 t1=lft[l][r-1];t2=rht[l][r-1];x=a[r];
    45                 if(t2==x)    lft[l][r]=0;
    46                 else if(x<t1&&x<t2)    lft[l][r]=x;
    47                 else if(x>t1&&x>t2)    lft[l][r]=x;
    48                 else if(t1<=x&&x<t2)    lft[l][r]=x+1;
    49                 else if(t2<x&&x<=t1)    lft[l][r]=x-1;
    50             }
    51             for(l=1;l<=n-i+1;++l)
    52             {
    53                 r=l+i-1;
    54                 t1=lft[l+1][r];t2=rht[l+1][r];x=a[l];
    55                 if(t1==x)    rht[l][r]=0;
    56                 else if(x<t1&&x<t2)    rht[l][r]=x;
    57                 else if(x>t1&&x>t2)    rht[l][r]=x;
    58                 else if(t2<=x&&x<t1)    rht[l][r]=x+1;
    59                 else if(t1<x&&x<=t2)    rht[l][r]=x-1;
    60             }
    61         }
    62         printf("%d
    ",int(lft[2][n]!=a[1]));
    63     }
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    PCRE
    [转]如何解决严重的拖延症
    linux系统编程:setjmp和longjmp函数用法
    AWK中几个变量
    关于fork函数
    go mod
    golang+read_file+call_shell+goroutine
    vim for galang
    Linux install go
    为Git branch 打Tag
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9937124.html
Copyright © 2011-2022 走看看