10.4模擬賽
阿新 • • 發佈:2021-10-05
1 #include<bits/stdc++.h> 2 using namespace std; 3 inline int re_ad() { 4 char ch=getchar(); int x=0,f=1; 5 while(ch<'0' || '9'<ch) { if(ch=='-') f=-1; ch=getchar(); } 6 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 7 return x*f;8 } 9 10 const int N=2e5+11,St=1e5; 11 int n,ans,sum[N],lst[N]; 12 13 int main() 14 { 15 16 n=re_ad(); lst[0+St]=0; 17 for(int i=1,x;i<=n;++i) { 18 x=re_ad(),x=!x?-1:1,sum[i]=sum[i-1]+x; 19 if(!lst[sum[i]+St] && sum[i]!=0) lst[sum[i]+St]=i; 20 else ans=max(ans,i-lst[sum[i]+St]);21 } 22 printf("%d\n",ans); 23 return 0; 24 }
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 inline ll re_ad() { 5 char ch=getchar(); ll x=0,f=1; 6 while(ch<'0' || '9'<ch) { if(ch=='-') f=-1; ch=getchar(); } 7 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 8 return x*f; 9 } 10 11 const ll N=1e6+11,L=31; 12 ll n,m,ans,lens,lent,mem[L]; 13 char s[N],t[N]; 14 ll gcd(ll x,ll y) { return !y?x:gcd(y,x%y); } 15 16 int main() 17 { 18 scanf("%lld%lld",&n,&m); 19 scanf("%s",s+1); lens=strlen(s+1); 20 scanf("%s",t+1); lent=strlen(t+1); 21 ll g=gcd(lens,lent),gs=lens/g,gt=lent/g; 22 // printf("%lld %lld %lld\n",g,gs,gt); 23 for(ll i=1;i<=g;++i) { 24 memset(mem,0,sizeof(mem)); 25 for(ll j=i;j<=lens;j+=g) ++mem[s[j]-'a']; 26 for(ll j=i;j<=lent;j+=g) ans+=mem[t[j]-'a']; 27 // printf("%lld\n",ans); 28 } 29 n/=gt,m/=gs,ans*=n; 30 printf("%lld\n",ans); 31 return 0; 32 }
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 inline ll re_ad() { 5 char ch=getchar(); ll x=0,f=1; 6 while(ch<'0' || '9'<ch) { if(ch=='-') f=-1; ch=getchar(); } 7 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 8 return x*f; 9 } 10 11 const ll N=1e5+11; 12 ll n,m,a[N],Maxx,sum[N]; 13 ll ht[N],L[N],R[N]; 14 inline ll Get_Highest() { 15 ll lj=0,res=0; 16 for(ll i=1;i<=n;++i) lj=max(lj+1,a[i]),ht[i]=lj; 17 lj=0; for(ll i=n;i>=1;--i) lj=max(lj+1,a[i]),res=max(res,min(ht[i],lj)); 18 return res; 19 } 20 21 inline bool Check(ll d) { 22 ll qsum=0; 23 memset(L,0,sizeof(L)),memset(R,0,sizeof(R)); 24 for(ll i=n,lj=n;i>=1;--i) { 25 while(d-a[lj]>i-lj && lj>=1) --lj; 26 L[i]=lj; 27 } 28 for(ll i=1,lj=1;i<=n;++i) { 29 while(d-a[lj]>lj-i && lj<=n) ++lj; 30 R[i]=lj; 31 } 32 // puts(""); printf("%lld: \n",d); 33 // printf("L: "); for(ll i=1;i<=n;++i) printf("%lld ",L[i]); puts(""); 34 // printf("R: "); for(ll i=1;i<=n;++i) printf("%lld ",R[i]); puts(""); 35 for(ll i=1;i<=n;++i) { 36 if(L[i]<1 || R[i]>n) continue; 37 ll x=i-L[i],y=R[i]-i-1; 38 ll xx=x*d-x*(x-1)/2-sum[i]+sum[L[i]]; 39 ll yy=y*d-y*(y-1)/2-sum[R[i]-1]+sum[i]; 40 // printf("%lld: %lld %lld %lld %lld\n",i,x,y,xx,yy); 41 if(xx+yy<=m) return true; 42 } 43 return false; 44 } 45 46 int main() 47 { 48 n=re_ad(),m=re_ad(); 49 for(ll i=1;i<=n;++i) a[i]=re_ad(); 50 for(ll i=1;i<=n;++i) sum[i]=sum[i-1]+a[i],Maxx=max(Maxx,a[i]); 51 ll l=Maxx+1,r=Get_Highest(),ans=Maxx; 52 // printf("l,r: %lld %lld\n",l,r); 53 while(l<=r) { 54 ll mid=(l+r)>>1; 55 if(Check(mid)) l=mid+1,ans=mid; 56 else r=mid-1; 57 } 58 printf("%lld\n",ans); 59 return 0; 60 }
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 inline ll re_ad() { 5 char ch=getchar(); ll x=0,f=1; 6 while(ch<'0' || '9'<ch) { if(ch=='-') f=-1; ch=getchar(); } 7 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 8 return x*f; 9 } 10 11 const ll N=3e5+11,M=6e5+11; 12 ll n,a[N],dp[N][3],son[N],ans[N]; 13 ll to[M],nxt[M],w[M],edge,head[N]; 14 inline void addedge(ll x,ll y,ll z) { 15 ++edge,to[edge]=y,nxt[edge]=head[x],w[edge]=z,head[x]=edge; 16 ++edge,to[edge]=x,nxt[edge]=head[y],w[edge]=z,head[y]=edge; 17 } 18 19 void dfs1(ll d,ll f) { 20 dp[d][0]=a[d]; 21 for(ll i=head[d],u;i;i=nxt[i]) { 22 u=to[i]; if(u==f) continue; 23 dfs1(u,d); 24 dp[d][0]+=max(dp[u][0]-w[i]*2,0ll); 25 ll els=dp[u][0]-max(dp[u][0]-w[i]*2,0ll); 26 ll t=dp[u][1]-w[i]+els; 27 if(t>dp[d][1]) dp[d][2]=dp[d][1],dp[d][1]=t,son[d]=u; 28 else if(t>dp[d][2]) dp[d][2]=t; 29 } 30 } 31 void dfs2(ll d,ll f) { 32 for(ll i=head[d],u;i;i=nxt[i]) { 33 u=to[i]; if(u==f) continue; 34 ll tmp=dp[d][0]-w[i]*2; 35 ll tu=max(dp[u][0]-w[i]*2,0ll); 36 dp[u][0]+=max(tmp-tu,0ll); 37 tmp=min(tmp-tu,0ll); 38 ll t=tmp+dp[d][(son[d]==u)+1]+w[i]; 39 if(t>dp[u][1]) dp[u][2]=dp[u][1],dp[u][1]=t,son[u]=d; 40 else if(t>dp[u][2]) dp[u][2]=t; 41 dfs2(u,d); 42 } 43 } 44 45 int main() 46 { 47 n=re_ad(); 48 for(ll i=1,x,y,z;i<n;++i) x=re_ad(),y=re_ad(),z=re_ad(),addedge(x,y,z); 49 for(ll i=1;i<=n;++i) a[i]=re_ad(); 50 dfs1(1,0); dfs2(1,0); 51 for(ll i=1;i<=n;++i) printf("%lld\n",dp[i][0]+dp[i][1]); 52 return 0; 53 }