zoukankan      html  css  js  c++  java
  • cf C. Arithmetic Progression

    http://codeforces.com/contest/382/problem/C

    题意:给你n个数,然后让你添加一个数使得n+1个数能形成这样的规律,a[1]-a[0]=a[2]-a[1]=a[3]-a[2].....,问这样的数有多少个?输出出来。

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <algorithm>
      4 #include <map>
      5 #define maxn 100001
      6 using namespace std;
      7 
      8 int n;
      9 int a[maxn];
     10 int b[maxn];
     11 
     12 int main()
     13 {
     14     while(scanf("%d",&n)!=EOF)
     15     {
     16         map<int,int>q;
     17         int cnt=0;
     18         for(int i=0; i<n; i++)
     19         {
     20             scanf("%d",&a[i]);
     21         }
     22         sort(a,a+n);
     23         if(n==1)
     24         {
     25             printf("-1
    ");
     26             continue;
     27         }
     28         if(n==2)
     29         {
     30             if((a[0]+a[1])%2==0)
     31             {
     32                 int m=(a[0]+a[1])/2-a[0];
     33                 if((a[0]+a[1])/2==a[0])
     34                 {
     35                     printf("1
    ");
     36                     printf("%d
    ",a[0]);
     37                     continue;
     38                 }
     39                 printf("%d
    ",3);
     40                 printf("%d %d %d
    ",a[0]-(a[1]-a[0]),a[0]+m,a[1]+m*2);
     41             }
     42             else
     43             {
     44                 printf("%d
    ",2);
     45                 int m=a[1]-a[0];
     46                 printf("%d %d
    ",a[0]-m,a[1]+m);
     47             }
     48             continue;
     49         }
     50         if(n==3)
     51         {
     52             int m1=a[1]-a[0];
     53             int m2=a[2]-a[1];
     54             if(m1>m2)
     55             {
     56                 if(m1==m2*2)
     57                 {
     58                     printf("%d
    ",1);
     59                     printf("%d
    ",a[0]+m2);
     60                 }
     61                 else
     62                 {
     63                     printf("0
    ");
     64                 }
     65             }
     66             else if(m1<m2)
     67             {
     68                 if(m2==m1*2)
     69                 {
     70                     printf("%d
    ",1);
     71                     printf("%d
    ",a[1]+m1);
     72                 }
     73                 else
     74                 {
     75                     printf("0
    ");
     76                 }
     77             }
     78             else if(m1==m2)
     79             {
     80                 if(a[0]==a[1])
     81                 {
     82                     printf("1
    ");
     83                     printf("%d
    ",a[0]);
     84                     continue;
     85                 }
     86                 printf("2
    ");
     87                 printf("%d %d
    ",a[0]-m1,a[n-1]+m1);
     88             }
     89             continue;
     90         }
     91         int k;
     92         int max1=0;
     93         bool flag1=true;
     94         for(int i=1; i<n; i++)
     95         {
     96             int m=a[i]-a[i-1];
     97             if(m==0)
     98             {
     99                 flag1=false;
    100             }
    101             if(q[m]==0)
    102             {
    103                 q[m]=1;
    104             }
    105             else
    106                 q[m]++;
    107             if(q[m]>max1)
    108             {
    109                 max1=q[m];
    110                 k=m;
    111             }
    112         }
    113         if(!flag1)
    114         {
    115             if(k!=0)
    116             {
    117                 printf("0
    ");
    118                 continue;
    119             }
    120         }
    121         if(k==0)
    122         {
    123             bool flag=true;
    124             for(int i=1; i<n; i++)
    125             {
    126                 if(a[i]-a[i-1]!=k)
    127                 {
    128                     flag=false;
    129                     printf("0
    ");
    130                     break;
    131                 }
    132             }
    133             if(flag==true)
    134             {
    135                 printf("1
    ");
    136                 printf("%d
    ",a[0]);
    137             }
    138         }
    139         else
    140         {
    141             int f=0;
    142             for(int i=1; i<n; i++)
    143             {
    144                 if(a[i]-a[i-1]!=k)
    145                 {
    146                     if(f==1)
    147                     {
    148                         f=2;
    149                         printf("0
    ");
    150                         break;
    151                     }
    152                     else if(f==0)
    153                     {
    154                         f=1;
    155                         if((a[i]+a[i-1])%2!=0)
    156                         {
    157                             printf("0
    ");
    158                             f=2;
    159                             break;
    160                         }
    161                         else
    162                         {
    163                             if((a[i]+a[i-1])/2==a[i-1]+k)
    164                                 b[cnt++]=(a[i]+a[i-1])/2;
    165                             else
    166                             {
    167                                 f=2;
    168                                 printf("0
    ");
    169                                 break;
    170                             }
    171                         }
    172                     }
    173                 }
    174             }
    175             if(f==0)
    176             {
    177                 b[cnt++]=a[0]-k;
    178                 b[cnt++]=a[n-1]+k;
    179             }
    180             if(f==2) continue;
    181             sort(b,b+cnt);
    182             printf("%d
    ",cnt);
    183             for(int i=0; i<cnt; i++)
    184             {
    185                 if(i==0)
    186                     printf("%d",b[i]);
    187                 else printf(" %d",b[i]);
    188             }
    189             printf("
    ");
    190         }
    191     }
    192 }
    View Code
  • 相关阅读:
    python3.7 打包(.exe)神器——pyinstaller 安装及用法
    python3.7下运行pyspider报错的问题及解决方案
    python3一键排版证件照(一寸照、二寸照),附源代码
    傻瓜式下载“喜马拉雅”音频文件
    windows 7 32位环境下安装Redis、安装桌面管理工具redis-desktop-manager
    python3爬虫之验证码的识别——selenium自动识别验证码并点击提交,附源代码
    python3爬虫之验证码的识别——第三方平台超级鹰
    python3爬虫之验证码的识别——图形验证码
    python3爬虫之图形验证码的识别——环境安装
    scrapy爬虫笔记(入门级案例)
  • 原文地址:https://www.cnblogs.com/fanminghui/p/4196484.html
Copyright © 2011-2022 走看看