• Codeforces Round #224 (Div. 2)


    题目:http://codeforces.com/contest/382

    Ksenia and Pan Scales

    一个求天平是否能够平衡的题目。。。水题,注意一下结果的输出就行。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int i,len;
    11     int L,R,x,sum;
    12      char a[10000],b[10000];
    13      while(~scanf("%s",a))
    14      {
    15          L=0; R=0;
    16          for(i=0; i<strlen(a); i++)
    17          {
    18              if(a[i]=='|')
    19              break;
    20              L++;
    21          }
    22          R=strlen(a)-1-L;
    23          scanf("%s",b);
    24          len=strlen(b);
    25          x=abs(L-R);
    26 
    27          if(x>len)
    28          printf("Impossible
    ");
    29          else if((len-x)%2==1)
    30          printf("Impossible
    ");
    31          else
    32          {
    33                  sum=L+R+len;
    34                  for(i=0; i<L; i++)
    35                  printf("%c",a[i]);
    36                  for(i=0; i<sum/2-L; i++)
    37                  printf("%c",b[i]);
    38 
    39                  printf("%c",a[L]);
    40                  for(i=sum/2-L; i<len; i++)
    41                  printf("%c",b[i]);
    42                  for(i=L+1; i<strlen(a); i++)
    43                  printf("%c",a[i]);
    44                  printf("
    ");
    45          }
    46      }
    47     return 0;
    48 }

    Arithmetic Progression

    已知n个数,再给一个数,求有多少种数,能使序列构成等差数列。。

    比赛的时候思路有的混乱,没做,今天做了一下,1Y

    网上还有按照 间隔分的做法,思路差不多。。代码也挺长的。。。

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <cstdlib>
      5 #include <map>
      6 #include <algorithm>
      7 using namespace std;
      8 
      9 int a[100005],b[100005];
     10 int n;
     11 int check(int d[],int ant)//判断是否符合等差数列的条件
     12 {
     13     int i,x;
     14     for(i=0; i<n; i++)
     15     b[i]=d[i];
     16 
     17     b[n]=ant;
     18     sort(b,b+n+1);
     19     x=b[1]-b[0];
     20     for(i=2; i<=n; i++)
     21     {
     22         if((b[i]-b[i-1])!=x)
     23         return 0;
     24     }
     25     return 1;
     26 }
     27 
     28 int main()
     29 {
     30     int i,f,x,sum,ans;
     31     while(~scanf("%d",&n))
     32     {
     33         map<int,int>mp;
     34         map<int,int>::iterator iter;
     35         x=0;
     36         for(i=0; i<n; i++)
     37             scanf("%d",&a[i]);
     38 
     39         if(n==1)  //特判
     40         printf("-1
    ");
     41         else
     42         {
     43             sort(a,a+n);
     44             f=0;
     45             for(i=1; i<n; i++)
     46             if(a[i-1]==a[i])
     47             {
     48                 f=1; break;
     49             }
     50 
     51             if(a[0]==a[n-1])//特判
     52             printf("1
    %d
    ",a[0]);
     53             else if(f)
     54             printf("0
    ");//特判
     55             else
     56             {
     57                x=a[1]-a[0];
     58                if(check(a,a[0]-x)) //情况1,假设前两个与整个序列相符合,而且整个序列已经等差,前面
     59                {
     60                    mp[a[0]-x]++;
     61                }
     62                if(check(a,a[n-1]+x)&&mp[a[n-1]+x]==0)//情况1,假设前两个与整个序列相符合,而且整个序列已经等差,后面
     63                mp[a[n-1]+x]++;
     64                for(i=2; i<n; i++)  //情况2,假设前两个与整个序列相符合,而且整个序列没有等差
     65                {
     66                    if((a[i]-a[i-1])!=x)
     67                    {
     68                        if(check(a,a[i-1]+x)&&mp[a[i-1]+x]==0)
     69                        mp[a[i-1]+x]++;
     70                        break;
     71                    }
     72                }
     73                if(n>=3) //情况3,假设前两个与整个序列相符合
     74                {
     75                    x=a[2]-a[1];
     76                    if(check(a,a[0]+x)&&mp[a[0]+x]==0)
     77                    mp[a[0]+x]++;
     78                }
     79                else  //情况4,只有两个,取中间的值
     80                {
     81                    if((a[0]+a[1])%2==0)
     82                    {
     83                        if(check(a,(a[0]+a[1])/2)&&mp[(a[0]+a[1])/2]==0)
     84                        mp[(a[0]+a[1])/2]++;
     85                    }
     86                }
     87                sum=0;
     88                iter=mp.begin();
     89                while(iter!=mp.end())
     90                {
     91                    sum++;
     92                    iter++;
     93                }
     94                if(sum==0)
     95                printf("%d
    ",sum);
     96                else
     97                {
     98                    printf("%d
    ",sum);
     99                    ans=0;
    100                    iter=mp.begin();
    101                   while(iter!=mp.end())
    102                   {
    103                    ans++;
    104                    if(ans!=sum)
    105                    printf("%d ",iter->first);
    106                    else
    107                    printf("%d
    ",iter->first);
    108                    iter++;
    109                   }
    110                }
    111             }
    112         }
    113     }
    114     return 0;
    115 }
  • 相关阅读:
    引领云原生2.0,华为云加速云原生全行业落地!
    【STM32H7】第22章 ThreadX GUIX窗口图标滑动操作实现方法
    【STM32F429】第21章 ThreadX GUIX窗口图标滑动操作实现方法
    【STM32H7】第21章 ThreadX GUIX外置主题,字库和图库到外部SPI Flash
    【STM32F429】第20章 ThreadX GUIX外置主题,字库和图库到外部SPI Flash
    【STM32H7】第20章 ThreadX GUIX汉字显示(QSPI Flash全字库)
    【STM32H7】第19章 ThreadX GUIX的OLED单色屏移植
    【STM32F429】第19章 ThreadX GUIX的OLED单色屏移植
    第28届全球超顶级PCB设计PK结果公布,含炫酷PCB设计效果展示(2020-12-28)
    H7-TOOL固件升级至V1.45,增加上位机截图功能(2020-12-27)
  • 原文地址:https://www.cnblogs.com/bfshm/p/3524892.html
Copyright © 2020-2023  润新知