洛谷9月月赛II 赛后瞎写

看错比赛时间了....结果发现的时候已经开始了半个小时,并且当时正准备睡午觉qwq 于是就水了个t1就 去睡 跑了

T2

写着写着然后看了一发评讲被辣椒思路给绕了进去最后发现自己宛若一个智障

类似桶的思想 直接用map映射一下向左倒和向右倒的杆子数量,若重合数为i, ans+=i*(i-1)/2;

就没了....

(去你的分类讨论

学了一波map的操作

  建立:std:map<int,int> mmp;

  赋值:mmp[i]=val;

  遍历:for(map<int,int>::iterator i=mmp.begin();i!=mmp.end;i++)

  查找:(1) 取key:i->first (2)取value:i->second

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<map>
 7 using namespace std;
 8 long long n,m,ans;
 9 std::map<long long,long long> mmp;
10 int main()
11 {
12     scanf("%lld%lld",&n,&m);
13     for(long long i=1;i<=n;i++)
14     {
15         long long k;
16         scanf("%lld",&k);
17         mmp[k+i]++;
18         mmp[i-k]++;
19     }
20     for(map<long long,long long>::iterator i=mmp.begin();i!=mmp.end();i++)
21         ans+=i->second*(i->second-1)/2;
22     printf("%lld",ans);
23     return 0;
24 }
View Code

猜你喜欢

转载自www.cnblogs.com/kylara/p/9694034.html
今日推荐