汕頭市隊賽 SRM16
阿新 • • 發佈:2017-08-27
記錄 -a 求和 etc str i++ getchar lose 範圍
T3
C-2 SRM 16
描述
給一個數列,給出兩種數字, 詢問在多少個非空區間中這兩種數字出現次數相同。
輸入格式
第一行:一個數字n,q,n表示數列長度,q表示q組詢問
第二行n個數字表示數列A
接下來q行每行2個數字表示詢問
輸出格式
輸出q行分別對應每個問題的答案
樣例輸入
2 1
1 2
1 2
樣例輸出
1
數據範圍與約定
n <= 5000,q <= 10000 其他數字在int範圍內
樣例解釋
只有區間[1,2]符合
——————————————————————————
因為 符合的狀態就是 a.r-a.l=b.r-b.l
轉換一下就是 a.r-b.r=a.l-b.l
然後我們記錄一下差然後瞎jb搞就好了
#include<cstdio> #include<cstring> #include<algorithm> #define LL long long using namespace std; const int M=1e4+7,mod=9875321; int read(){ int ans=0,f=1,c=getchar(); while(c<‘0‘||c>‘9‘){if(c==‘-‘) f=-1; c=getchar();} whileView Code(c>=‘0‘&&c<=‘9‘){ans=ans*10+(c-‘0‘); c=getchar();} return ans*f; } int n,q,k1,k2; int s[M]; int f[2*M]; int main() { n=read(); q=read(); for(int i=1;i<=n;i++) s[i]=read(); for(int i=1;i<=q;i++){ for(int i=0;i<=2*n;i++) f[i]=0; f[n]=1; k1=read(); k2=read();int cnt1=0,cnt2=0; LL ans=0; for(int i=1;i<=n;i++){ if(s[i]==k1) cnt1++; if(s[i]==k2) cnt2++; int now=cnt1-cnt2+n; ans+=f[now]; f[now]++; } printf("%lld\n",ans); } return 0; }
C-3 SRM 16
描述
給一個數列, 詢問對於在數列中出現過的數字種類集合S。對於所有的x屬於S,y屬於S,詢問在數列中有多少個區間,x,y這兩種數字出現次數相同,對於所有的詢問求和後輸出。
輸入格式
第一行:一個數字n
第二行n個數字表示數列A
輸出格式
輸出1行表示問題的答案
樣例輸入
2
1 2
樣例輸出
7
數據範圍與約定
n <= 8000, 其他數字在int範圍內
樣例解釋
一共有三種不同的詢問
A 詢問1,1 共有3個區間
B 詢問1, 2共有1個區間
C 詢問2,2共有3個區間
—————————————————————————————
這道題就n^2枚舉區間 然後記錄每個點的出現次數 以及每種出現次數的
就好了
#include<cstdio> #include<algorithm> #include<cstring> #include<queue> #define LL long long using namespace std; int read(){ int ans=0,f=1,c=getchar(); while(c<‘0‘||c>‘9‘){if(c==‘-‘) f=-1; c=getchar();} while(c>=‘0‘&&c<=‘9‘){ans=ans*10+(c-‘0‘); c=getchar();} return ans*f; } const int M=1e4+7; int n,s[M],sq,ss[M]; LL h[M],f[M],ans,sum; int main() { n=read(); for(int i=1;i<=n;i++) s[i]=read(),ss[i]=s[i]; sort(ss+1,ss+1+n); sq=unique(ss+1,ss+1+n)-ss-1; for(int i=1;i<=n;i++) s[i]=lower_bound(ss+1,ss+1+n,s[i])-ss; for(int i=1;i<=n;i++){ memset(h,0,sizeof(h)); memset(f,0,sizeof(f)); sum=sq*(sq+1)/2; h[0]=sq; for(int j=i;j<=n;j++){ sum=sum-h[f[s[j]]]+h[f[s[j]]+1]+1; ans+=sum; h[f[s[j]]]--; h[f[s[j]]+1]++; f[s[j]]++; } }printf("%lld\n",ans); return 0; }View Code
汕頭市隊賽 SRM16