关闭

hdu 5400

标签: hdu
115人阅读 评论(0) 收藏 举报
分类:

开个map表示每个数组单独是否已经被算过了,注意自增和下标的前移以及回退,不要死循环~

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n,d1,d2;
const int maxn=1e5+10;
int a[maxn];map<int,int>m;
int main(){
    while(scanf("%d%d%d",&n,&d1,&d2)!=EOF){
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        m.clear();
        ll ans=0;
        int sum,flag;flag=0;
        for(int i=1;i<=n;i++){
            int j=i+1;sum=1;//flag=0;
            while(j<=n&&a[j]-a[j-1]==d1){
                sum++;j++;
            }
            while(j<=n&&a[j]-a[j-1]==d2){
                sum++;j++;
            }
        //  system("pause");
        //  cout<<" j= "<<j<<endl;
        //  cout<<" i= "<<i<<" sum= "<<sum<<endl;
            if(j!=i+1){
             ans+=(1ll*sum*(sum+1)/2);m[j-1]=1;
             if(m[i]) ans--;
            }
            else if(m[i]==0) ans+=(1ll*sum*(sum+1)/2);
        //  cout<<" ans = "<<ans<<endl;
            if(j!=i+1) i=j-2;
        }
        printf("%lld\n",ans);
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:44540次
    • 积分:2494
    • 等级:
    • 排名:第14782名
    • 原创:208篇
    • 转载:5篇
    • 译文:0篇
    • 评论:30条
    最新评论