题解 P4889 【kls与flag】

· · 题解

运用了不用map的方法
即把每个杆子可能落到的位置存进数组
运用sort排序一遍

``` #include<bits/stdc++.h> using namespace std; long long a,b,c[200002],d[400002],e=0,i,j,k,l; int main(){ ios::sync_with_stdio(false); cin>>a>>b; //O(NlogN),放心用cin for(i=1;i<=a;i++){ cin>>c[i];e+=2; d[e-1]=i-c[i];d[e]=i+c[i]; //入数组 } sort(d+1,d+e+1); //排序 for(i=1;i<=2*a;i++){ if(d[i]!=d[i-1]) //如果不在这个点了 k=0; else k++,l+=k; //如果在,就加一下 } cout<<l; //输出最后答案 } ```