佳木斯集训Day3
D3是我的巅峰
D3的出题人毒瘤!!!T3放了一道莫队,我们全体爆炸,到现在只有一个奆老A掉了T3
据说lkh被晓姐姐D了
T1是个26进制数,当时在考场上想了好久才想到(太次了)注意需要处理一下溢出的情况,不过幸好最后还是A了
1 #include <bits/stdc++.h> 2 #define MAXN 200050 3 using namespace std; 4 int n,point,start,finish,x=0; 5 struct Node{ 6 int num; 7 int cha; 8 }h[MAXN]; 9 char a[MAXN],b[MAXN]; 10 int c[MAXN]; 11 int ans[MAXN]; 12 int main() 13 { 14 char qq; 15 cin>>n; 16 for(int i=1;i<=n;i++) 17 { 18 cin>>qq; 19 a[i]=qq-'a'; 20 } 21 for(int i=1;i<=n;i++) 22 { 23 cin>>qq; 24 b[i]=qq-'a'; 25 } 26 for(int i=n;i>=1;i--) 27 { 28 if(ans[i]+a[i]+b[i]>=26) 29 { 30 ans[i]=ans[i]+a[i]+b[i]-26; 31 ans[i-1]++; 32 } 33 else 34 ans[i]=ans[i]+a[i]+b[i]; 35 } 36 for(int i=0;i<=n;i++) 37 { 38 int l; 39 l=ans[i]; 40 ans[i]=ans[i]/2+x; 41 if(l%2==0) 42 x=0; 43 else x=13; 44 } 45 for(int i=1;i<=n;i++) 46 cout<<char(ans[i]+'a'); 47 }
T2我写的大暴力,然后TLE20,最后正解是逆元和欧拉函数???
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int sz=3e5+1; 4 const int mod=1e8+7; 5 int n,x; 6 int inv[sz],a[sz],b[sz]; 7 int cnt[sz],f[sz]; 8 void init(){ 9 a[0]=b[0]=1; 10 inv[1]=a[1]=b[1]=1; 11 for(int i=2;i<sz;i++){ 12 inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod; 13 a[i]=1ll*a[i-1]*i%mod; 14 b[i]=1ll*b[i-1]*inv[i]%mod; 15 } 16 } 17 int C(int n,int m){ 18 if(!n) return 0; 19 return 1ll*a[n]*b[m]%mod*b[n-m]%mod; 20 } 21 bool cur(int len){ 22 for(int i=sz-1;i>=1;i--){ 23 f[i]=C(cnt[i],len); 24 for(int j=2;i*j<sz;j++) f[i]=(f[i]-f[i*j]+mod)%mod; 25 } 26 return f[1]; 27 } 28 int main(){ 29 init(); 30 scanf("%d",&n); 31 for(int i=1;i<=n;i++) scanf("%d",&x),cnt[x]++; 32 for(int i=1;i<sz;i++) for(int j=2;i*j<sz;j++) cnt[i]+=cnt[i*j]; 33 x=1; 34 while(!cur(x)&x<=7) x++; 35 if(x<=7) printf("%d",x); 36 else printf("-1"); 37 }
T3的莫队我也写的暴力(暴力大法好),也是TLE20,正解莫队,实在不会,这个坑先暂时放这里23333
代码嘛...奉上20分的把
1 #include <bits/stdc++.h> 2 #define MAXN 100050 3 using namespace std; 4 struct Node{ 5 int one; 6 int two; 7 }c[MAXN]; 8 int a[MAXN],sum1[MAXN],sum2[MAXN],t[MAXN],q,k,n,l,r; 9 int lowbit(int x) 10 { 11 return x&(-x); 12 } 13 int update(int x,int y,int t) 14 { 15 for(int i=1;i<=1e5;i=i+lowbit(x)) 16 { 17 if(t==1) 18 c[i].one=c[i].one+y; 19 else 20 c[i].two=c[i].two+y; 21 } 22 } 23 int query(int x,int t) 24 { 25 int ans=0; 26 if(t==1) 27 { 28 for(int i=x;i>0;i=i-lowbit(x)) 29 { 30 ans+=c[i].one; 31 } 32 return ans; 33 } 34 else 35 { 36 for(int i=x;i>0;i=i-lowbit(x)) 37 { 38 ans+=c[i].two; 39 } 40 return ans; 41 } 42 } 43 int main() 44 { 45 cin>>n>>k; 46 for(int i=1;i<=n;i++) 47 { 48 cin>>t[i]; 49 } 50 for(int i=1;i<=n;i++) 51 cin>>a[i]; 52 cin>>q; 53 while(q--) 54 { 55 int ans=0; 56 cin>>l>>r; 57 for(int i=l;i<=r;i++) 58 { 59 int a1=0,a2=0,sum=0; 60 for(int j=i;j<=r;j++) 61 { 62 if(t[j]==1) 63 a1+=a[j]; 64 else a2+=a[j]; 65 if(a1-a2==k) 66 sum++; 67 68 }ans+=sum; 69 } 70 cout<<ans<<endl; 71 } 72 }