zoukankan      html  css  js  c++  java
  • HDU5400 Arithmetic Sequence

    解题思路:这题看懂题目是很关键的,这个区间是等差数列,且公差为d1或d2,

         特别注意单个数字也为等差数列。每次求出等差数列序列长度,然后

          求出对应这种长度对应有多少种组合方式,累加起来就是结果。

          注意要用long long,还有注意特判数据,如 5 -1 -1 ,5 4 3 2 1;

         5 1 1, 1 2 3 4 5 ; 5 1 1, 1 1 1 1 1等。

     1 #include<cstdio>
     2 int main()
     3 {
     4     int A[100005], n, d1, d2;
     5     long long  sum, cnt; //注意这里要用long long 否则会WA
     6     //int sum, cnt;
     7     while(~scanf("%d %d %d", &n, &d1, &d2))
     8     {
     9         sum = cnt = 0;
    10         for(int i = 0; i < n; i++) scanf("%d", &A[i]);
    11         for(int i = 1; i < n; i++)
    12         {
    13             if(A[i]-A[i-1] ==  d1)
    14             {
    15                 while(A[i]-A[i-1] == d1)
    16                 {
    17                     i ++;
    18                     cnt ++;
    19                     if(i == n) break;
    20                 }
    21                 if(i == n) break; //i为n时要及时跳出,其它地方同理。
    22                 while(A[i]-A[i-1] == d2)
    23                 {
    24                     i ++;
    25                     cnt ++;
    26                     if(i == n) break;
    27                 }
    28                 sum += (cnt+1)*cnt/2; //满足条件的序列长度为cnt+1时,共有(cnt+1)*cnt/2种组合方式
    29                 cnt = 0; //cnt重新初始化
    30                 i --; //一定要回退一步,画画就知道了。
    31                 continue;
    32             }
    33             if(i == n) break;
    34             if(A[i]-A[i-1] == d2)
    35             {
    36                 while(A[i]-A[i-1] == d2)
    37                 {
    38                     i ++;
    39                     cnt ++;
    40                     if(i == n) break;
    41                 }
    42                 sum += (cnt+1)*cnt/2;
    43                 cnt = 0;
    44                 i --;
    45             }
    46         }
    47         sum += (cnt+1)*cnt/2; //这步不能少
    48         printf("%I64d
    ", sum+n); //一定要加上这个n,刚开始我加的是5,WA了一发
    49        // printf("%d
    ", sum+n);
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    python中的函数编程
    Python中的类型关系和继承关系
    MySQLdb for Python使用指南
    调试模式
    js window.open打开新页面
    JVM调优
    jacoco(spring boot启动) agent tcpserver使用方案
    C#多线程之ManualResetEvent和AutoResetEvent
    下载verycd的方法下载电驴资源隐藏资源的最新可用方法
    C# 多线程之信号量Semaphore
  • 原文地址:https://www.cnblogs.com/loveprincess/p/4818984.html
Copyright © 2011-2022 走看看