• P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold


    P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
    我比赛的时候A了,luogu上25分,QAQ,又憨又傻的200+代码,我为什么要干电脑干的事情,无语了。
    如果左边<右边,取左
    如果右边<左边,取右
    如果相等,就向中间找,直到找到第一个不同的,然后给电脑指明下一步是取队首或队尾取就行了。

    AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<queue>
     4 #include<algorithm>
     5 #include<cmath>
     6 #include<ctime>
     7 #include<cstring>
     8 #define inf 2147483647
     9 #define For(i,a,b) for(register int i=a;i<=b;i++)
    10 #define p(a) putchar(a)
    11 #define g() getchar()
    12 //by war
    13 //2017.10.18
    14 using namespace std;
    15 int n;
    16 int l,r;
    17 int cnt;
    18 char a[30010],b[30010];
    19 void in(int &x)
    20 {
    21     int y=1;
    22     char c=g();x=0;
    23     while(c<'0'||c>'9')
    24     {
    25     if(c=='-')
    26     y=-1;
    27     c=g();
    28     }
    29     while(c<='9'&&c>='0')x=x*10+c-'0',c=g();
    30     x*=y;
    31 }
    32 void o(int x)
    33 {
    34     if(x<0)
    35     {
    36         p('-');
    37         x=-x;
    38     }
    39     if(x>9)o(x/10);
    40     p(x%10+'0');
    41 }
    42 
    43 void deal(int &x,int &y)
    44 {
    45     int l=x,r=y;
    46     while(a[l]==a[r]&&l<r)
    47     l++,r--;
    48         if(a[l]<a[r])
    49         {
    50            b[++cnt]=a[x];
    51            x++;
    52         }
    53         else
    54         {
    55              b[++cnt]=a[y];
    56             y--;
    57         }
    58 }
    59 
    60 int main()
    61 {
    62     in(n);
    63     For(i,1,n)
    64     cin>>a[i];
    65     l=1,r=n;
    66     while(l<=r)
    67     {
    68         if(a[l]<a[r])
    69         {
    70            b[++cnt]=a[l];
    71            l++;
    72         }
    73         else
    74         if(a[l]>a[r])
    75         {
    76              b[++cnt]=a[r];
    77             r--;
    78         }
    79         else
    80         {
    81             if(l!=r)
    82             deal(l,r);
    83             else
    84             {
    85             b[++cnt]=a[r];
    86             r--;    
    87             }
    88         }
    89     }
    90     For(i,1,cnt)
    91     {
    92         p(b[i]);
    93         if(i%80==0)
    94         p('
    ');
    95     }
    96      return 0;
    97 }
    View Code

    憨代码:

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<queue>
      4 #include<algorithm>
      5 #include<cmath>
      6 #include<ctime>
      7 #include<cstring>
      8 #define inf 2147483647
      9 #define For(i,a,b) for(register int i=a;i<=b;i++)
     10 #define p(a) putchar(a)
     11 #define g() getchar()
     12 //by war
     13 //2017.10.18
     14 using namespace std;
     15 int n;
     16 int l,r;
     17 int cnt;
     18 char a[30010],b[30010];
     19 void in(int &x)
     20 {
     21     int y=1;
     22     char c=g();x=0;
     23     while(c<'0'||c>'9')
     24     {
     25     if(c=='-')
     26     y=-1;
     27     c=g();
     28     }
     29     while(c<='9'&&c>='0')x=x*10+c-'0',c=g();
     30     x*=y;
     31 }
     32 void o(int x)
     33 {
     34     if(x<0)
     35     {
     36         p('-');
     37         x=-x;
     38     }
     39     if(x>9)o(x/10);
     40     p(x%10+'0');
     41 }
     42 
     43 void deal(int &x,int &y)
     44 {
     45     int l=x,r=y;
     46     char now=a[l];
     47     while(a[l]==a[r]&&l<r)
     48     {
     49         l++,r--;
     50     /*    if(a[l]==a[r]&&a[l]!=now)
     51         now=a[l];*/
     52     }
     53     if(l==r)
     54     {
     55         if(a[l]<now)
     56         {
     57         while(x<l)
     58         {
     59         b[++cnt]=a[x];
     60         x++;    
     61         }    
     62         }
     63         else
     64         {
     65         while(x<l)
     66         {
     67         b[++cnt]=a[x];
     68         x++;    
     69         }    
     70             while(y>r)
     71         {
     72         b[++cnt]=a[y];
     73         y--;    
     74         }
     75         }
     76     }
     77     else
     78     if(a[l]>=now&&a[r]>=now)
     79     {
     80         while(x<l)
     81         {
     82         b[++cnt]=a[x];
     83         x++;    
     84         }
     85         while(y>r)
     86         {
     87         b[++cnt]=a[y];
     88         y--;    
     89         }
     90     }
     91     else
     92     if(a[l]<=now&&a[r]<=now)
     93     {
     94         if(l-x>y-r)
     95         {
     96         while(y>r)
     97         {
     98         b[++cnt]=a[y];
     99         y--;    
    100         }
    101         }
    102         else
    103         if(l-x<y-r)
    104         {
    105             while(x<l)
    106         {
    107         b[++cnt]=a[x];
    108         x++;    
    109         }
    110         }
    111         else
    112         if(l-x==y-r)
    113         {
    114             if(a[l]>a[r])
    115             {
    116             while(y>r)
    117         {
    118         b[++cnt]=a[y];
    119         y--;    
    120         }    
    121             }
    122             else
    123             {
    124             while(x<l)
    125         {
    126         b[++cnt]=a[x];
    127         x++;    
    128         }    
    129             }
    130         }
    131     }
    132     else
    133     if(a[l]>=now&&now>=a[r])
    134     {
    135         while(y>r)
    136         {
    137         b[++cnt]=a[y];
    138         y--;    
    139         }
    140     }
    141     else
    142     if(a[l]<=now&&now>=a[r])
    143     {
    144         while(x<l)
    145         {
    146         b[++cnt]=a[x];
    147         x++;    
    148         }
    149     }
    150 }
    151 
    152 int main()
    153 {
    154     in(n);
    155     For(i,1,n)
    156     cin>>a[i];
    157     l=1,r=n;
    158     while(l<=r)
    159     {
    160         if(a[l]<a[r])
    161         {
    162            b[++cnt]=a[l];
    163            l++;
    164         }
    165         else
    166         if(a[l]>a[r])
    167         {
    168              b[++cnt]=a[r];
    169             r--;
    170         }
    171         else
    172         {
    173             if(l!=r)
    174             deal(l,r);
    175             else
    176             {
    177             b[++cnt]=a[r];
    178             r--;    
    179             }
    180         }
    181     }
    182     For(i,1,cnt)
    183     {
    184         p(b[i]);
    185         if(i%80==0)
    186         p('
    ');
    187     }
    188      return 0;
    189 }
    View Code
  • 相关阅读:
    洛谷P1656 炸铁路 题解 并查集
    洛谷P1455 搭配购买 题解 并查集+01背包
    欧拉计划第16题题解
    欧拉计划第15题题解
    欧拉计划第14题题解
    scrapy 爬虫保存数据
    FileNotFoundError: File b'score.xlsx' does not exist
    图片截取
    图像过滤器
    如何查看字符编码?
  • 原文地址:https://www.cnblogs.com/war1111/p/7687949.html
Copyright © 2020-2023  润新知