The 19th Zhejiang Provincial Collegiate Programming Contest
题解:
https://files.cnblogs.com/files/clrs97/2022ZJCPC%E5%88%86%E6%9E%90.zip
Code:
A. JB Loves Math
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<vector> #include<queue> #include<bitset> #include<set> #include<unordered_map> #include<unordered_set> #include<map> #include<cassert> #include<string> using namespace std; #define pb push_back #define mp make_pair #define data dataa #define rep(i,n) for(int i=1;i<=n;i++) typedef long long LL; int main() { int T; for ( scanf ( "%d" ,&T);T--;) { int a,b; scanf ( "%d%d" ,&a,&b); if (a==b) puts ( "0" ); else if (a<b) { if ((b-a)%2==1) puts ( "1" ); else if ((b-a)/2%2==1) puts ( "2" ); else puts ( "3" ); } else { if ((a-b)%2==0) puts ( "1" ); else puts ( "2" ); } } return 0; } |
B. JB Loves Comma
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include<bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define data dataa #define rep(i,n) for(int i=1;i<=n;i++) typedef long long LL; char s[100010]; bool comma[100010]; int main() { scanf ( "%s" ,s+1); int n= strlen (s+1); rep(i,n-2) if (s[i]== 'c' &&s[i+1]== 'j' &&s[i+2]== 'b' )comma[i+2]=1; rep(i,n) { putchar (s[i]); if (comma[i]) putchar ( ',' ); } puts ( "" ); return 0; } |
C. JB Wants to Earn Big Money
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include<bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define data dataa #define rep(i,n) for(int i=1;i<=n;i++) typedef long long LL; int main() { int n,m,x,ans=0; scanf ( "%d%d%d" ,&n,&m,&x); rep(i,n) { int y; scanf ( "%d" ,&y); ans+=y>=x; } rep(i,m) { int y; scanf ( "%d" ,&y); ans+=y<=x; } printf ( "%d\n" ,ans); return 0; } |
D. The Profiteer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include<cstdio> typedef long long ll; const int N=200005,M=20; int n,k,e,i,v[N],a[N],b[N],ans[N]; int f[M][N],g[N],h[N]; inline void up( int &a, int b){a<b?(a=b):0;} inline void copy( int *f, int *g){ for ( int i=0;i<=k;i++)f[i]=g[i];} inline void ins( int *f, int x, int y){ for ( int i=k;i>=x;i--)up(f[i],f[i-x]+y);} inline bool check( int l, int r, int x, int y){ //ans[x]<=y? if (x>y) return 0; int i; copy(h,g); for (i=l;i<=r;i++)ins(h,x<=i&&i<=y?b[i]:a[i],v[i]); ll sum=0; for (i=1;i<=k;i++)sum+=h[i]; return sum<=1LL*k*e; } void solve( int d, int L, int R, int dl, int dr){ if (L>R||dl>dr) return ; int dm=(dl+dr)>>1,l=L,r=R,mid,m=L-1,i; copy(g,f[d]); for (i=dl;i<=dr;i++){ if (i>=L&&i<=R) continue ; ins(g,L<=i&&i<=dm?b[i]:a[i],v[i]); } while (l<=r){ mid=(l+r)>>1; if (check(l,r,mid,dm)){ for (i=l;i<=mid;i++)ins(g,mid<i&&i<=dm?b[i]:a[i],v[i]); l=(m=mid)+1; } else { for (i=mid;i<=r;i++)ins(g,l<=i&&i<=dm?b[i]:a[i],v[i]); r=mid-1; } } for (i=L;i<=m;i++)ans[i]=dm; if (L<=m&&dl<dm){ copy(f[d+1],f[d]); for (i=m+1;i<=R;i++){ if (i>=dl&&i<dm) continue ; ins(f[d+1],L<=i&&i<dm?b[i]:a[i],v[i]); } for (i=dm;i<=dr;i++){ if (i>=L&&i<=R) continue ; ins(f[d+1],L<=i&&i<dm?b[i]:a[i],v[i]); } solve(d+1,L,m,dl,dm-1); } if (R>m&&dr>dm){ copy(f[d+1],f[d]); for (i=L;i<=m;i++){ if (i>dm&&i<=dr) continue ; ins(f[d+1],m<i&&i<=dr?b[i]:a[i],v[i]); } for (i=dl;i<=dm;i++){ if (i>=L&&i<=R) continue ; ins(f[d+1],m<i&&i<=dr?b[i]:a[i],v[i]); } solve(d+1,m+1,R,dm+1,dr); } } int main(){ scanf ( "%d%d%d" ,&n,&k,&e); for (i=1;i<=n;i++) scanf ( "%d%d%d" ,&v[i],&a[i],&b[i]); for (i=1;i<=n;i++)ans[i]=n+1; solve(0,1,n,1,n); ll fin=0; for (i=1;i<=n;i++)fin+=n-ans[i]+1; printf ( "%lld" ,fin); } |
E. Easy Jump
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include<bits/stdc++.h> using namespace std; const int maxn = 21000; int n,H,S,T1,T2; int P[maxn],o[maxn]; double p[maxn],q[maxn]; double f[maxn][10][10]; int main() { ios_base::sync_with_stdio( false ); cin>>n>>H>>S; for ( int i=1;i<=n;i++) cin>>P[i]; for ( int i=1;i<=n;i++) p[i]=P[i]/100.0,q[i]=1-p[i]; int K; cin>>K; while (K--) { int x; cin>>x; o[x]=1; } cin>>T1>>T2; for ( int s=0;s<=S;s++) for ( int h=1;h<=H;h++) f[n+1][s][h]=0; for ( int i=n;i>=1;i--) { if (o[i]) { if (T1<T2&&S>0) { for ( int s=S;s<=S;s++) for ( int h=2;h<=H;h++) { double mn; if (h>2) mn= 1+ p[i]*f[i+1][S][h] + q[i]*f[i][s][h-1]; else mn= ( 1+ p[i]*f[i+1][S][h] + q[i]*T1 )/p[i]; for ( int k=h;k<=H;k++) { double temp= (k-h)*T1+(1+ p[i]*f[i+1][S][k] + q[i]*T1)/p[i]; mn=min( mn, temp ); } f[i][s][h]=mn; } } else { for ( int s=S;s<=S;s++) for ( int h=2;h<=H;h++) { if (h>2) f[i][s][h]= 1+ p[i]*f[i+1][o[i+1]?S:s][h] + q[i]*f[i][s][h-1]; else f[i][s][h]= ( 1+ p[i]*f[i+1][o[i+1]?S:s][h] + q[i]*T2 )/p[i]; } } } else { for ( int s=0;s<=S;s++) for ( int h=2;h<=H;h++) { if (h>2) f[i][s][h]= 1+ p[i]*f[i+1][o[i+1]?S:s][h] + q[i]*f[i][s][h-1]; else { if (s&&T1<T2) { f[i][s][h]= 1+ p[i]*f[i+1][o[i+1]?S:s][h] + q[i]*(f[i][s-1][h]+T1); } else { f[i][s][h]= ( 1+ p[i]*f[i+1][o[i+1]?S:s][h] + q[i]*T2 )/p[i]; } } } } } cout<<fixed<<setprecision(12)<<f[1][S][H]<<endl; return 0; } |
F. Easy Fix
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | #include<bits/stdc++.h> #define lowbit(x) ((x)&(-x)) #define ll long long using namespace std; const int maxn = 110000; const int maxp = maxn*20; int n,m; struct segment { int tot; int seg[maxp],lc[maxp],rc[maxp]; void init() { tot=0; } int newnode() { ++tot; seg[tot]=lc[tot]=rc[tot]=0; return tot; } int loc,c; void upd( int &x, const int l, const int r) { if (!x) x=newnode(); seg[x]+=c; if (l==r) return ; int mid=(l+r)>>1; if (loc<=mid) upd(lc[x],l,mid); else upd(rc[x],mid+1,r); } void merge( int &x, const int y) { if (!y) return ; if (!x) { x=y; return ; } seg[x]+=seg[y]; merge(lc[x],lc[y]); merge(rc[x],rc[y]); } int lx,rx; int query( const int x, const int l, const int r) { if (rx<l||r<lx||!x) return 0; if (lx<=l&&r<=rx) return seg[x]; int mid=(l+r)>>1; return query(lc[x],l,mid)+query(rc[x],mid+1,r); } }; struct Solve { int a[maxn]; segment seg0a,seg0b,seg2,seg_2,segc; int root0a[maxn],root0b[maxn],root2[maxn],root_2[maxn],rootc[maxn]; int li[maxn],ri[maxn]; int s[maxn]; void upd( int x, int c){ for (;x<=n;x+=lowbit(x))s[x]+=c; } int query( int x) { int re=0; for (;x;x-=lowbit(x)) re+=s[x]; return re; } ll ans; void build() { ans=0; for ( int i=1;i<=n;i++) s[i]=0; seg0a.init(); seg0b.init(); seg2.init(); seg_2.init(); segc.init(); root0a[0]=root0b[0]=root2[0]=root_2[0]=rootc[0]=0; for ( int i=1;i<=n;i++) { int l=query(a[i]),r=a[i]-1-l; li[i]=l,ri[i]=r; int k=l-r; ans+=min(l,r); if (k>=0) { seg0a.loc=a[i],seg0a.c=1; seg0a.upd(root0a[i],1,n); } if (k<=0) { seg0b.loc=a[i],seg0b.c=1; seg0b.upd(root0b[i],1,n); } if (k>=2) { seg2.loc=a[i],seg2.c=1; seg2.upd(root2[i],1,n); } if (k<=-2) { seg_2.loc=a[i],seg_2.c=1; seg_2.upd(root_2[i],1,n); } segc.loc=a[i],segc.c=1; segc.upd(rootc[i],1,n); seg0a.merge(root0a[i],root0a[i-1]); seg0b.merge(root0b[i],root0b[i-1]); seg2.merge(root2[i],root2[i-1]); seg_2.merge(root_2[i],root_2[i-1]); segc.merge(rootc[i],rootc[i-1]); upd(a[i],1); } } ll query( int l, int r) { if (l==r) return ans; ll ret=ans; int x=a[l],y=a[r]; int d= x<y?-2:2; if (x>y) swap(x,y); { ret-=min(li[l],ri[l])+min(li[r],ri[r]); segc.lx=1,segc.rx=a[l]; int numc=segc.query(rootc[r],1,n)-1; ret+=min(numc,a[l]-1-numc); segc.lx=1,segc.rx=a[r]; numc=segc.query(rootc[l-1],1,n); ret+=min(numc,a[r]-1-numc); } if (d==2) { seg0a.lx=x,seg0a.rx=y; ret-=seg0a.query(root0a[r-1],1,n)-seg0a.query(root0a[l],1,n); seg_2.lx=x,seg_2.rx=y; ret+=seg_2.query(root_2[r-1],1,n)-seg_2.query(root_2[l],1,n); //>=0 -,<=-2 + } else { seg0b.lx=x,seg0b.rx=y; ret-=seg0b.query(root0b[r-1],1,n)-seg0b.query(root0b[l],1,n); seg2.lx=x,seg2.rx=y; ret+=seg2.query(root2[r-1],1,n)-seg2.query(root2[l],1,n); //<=0 -, >=2 + } return ret; } }S1; int main() { ios_base::sync_with_stdio( false ); cin>>n; for ( int i=1;i<=n;i++) cin>>S1.a[i]; S1.build(); cin>>m; while (m--) { int x,y; cin>>x>>y; if (x>y) swap(x,y); cout<<S1.query(x,y)<<endl; } return 0; } |
G. Easy Glide
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include<bits/stdc++.h> #define ll long long using namespace std; const int maxn = 1020; const double eps = 1e-7; int n; struct point { int x,y; double dis(point k){ return hypot(x-k.x,y-k.y); } }p[maxn],S,T; double Dis[maxn][maxn]; double V1,V2; int vis[maxn]; double f[maxn]; void Dij() { for ( int i=0;i<=n+1;i++) { f[i]= Dis[0][i]/V1; } for ( int k=0;k<=n+1;k++) { int mni=-1; for ( int i=0;i<=n+1;i++) if (!vis[i]) { if (mni==-1 || f[mni]-eps > f[i]) mni=i; } int i=mni; vis[i]=1; for ( int j=0;j<=n+1;j++) { double dd=Dis[i][j]; double t; if ( i>=1 && i<=n ) t= dd > 3*V2 ? (dd-3*V2)/V1+3 : dd/V2; else t= dd/V1; if (f[j]-eps > f[i]+t) f[j]=f[i]+t; } } } int v1,v2; int main() { ios_base::sync_with_stdio( false ); cin>>n; for ( int i=1;i<=n;i++) cin>>p[i].x>>p[i].y; cin>>S.x>>S.y; cin>>T.x>>T.y; p[0]=S,p[n+1]=T; cin>>V1>>V2; for ( int i=0;i<=n+1;i++) for ( int j=0;j<=n+1;j++) Dis[i][j]=p[i].dis(p[j]); Dij(); cout<<fixed<<setprecision(12)<<f[n+1]<<endl; return 0; } |
H. A=B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <bits/stdc++.h> using namespace std; string str[]={ "" , "S=XY" , "aX=Xa" , "bX=Xb" , "cX=Xc" , "X=ZP" , "PA=dp" , "PB=ep" , "PC=fp" , "pa=aP" , "pb=bP" , "pc=cP" , "p=(return)0" , "aA=Aa" , "bA=Ab" , "cA=Ac" , "aB=Ba" , "bB=Bb" , "cB=Bc" , "aC=Ca" , "bC=Cb" , "cC=Cc" , "Ya=AY" , "Yb=BY" , "Yc=CY" , "P=" , "Z=T1" , "1da=ad1" , "1eb=be1" , "1fc=cf1" , "1a=(return)1" , "1b=(return)1" , "1c=(return)1" , "1Y=(return)1" , "1=0" , "0da=ad0" , "0db=bd0" , "0dc=cd0" , "0ea=ae0" , "0eb=be0" , "0ec=ce0" , "0fa=af0" , "0fb=bf0" , "0fc=cf0" , "0=" , "Ta=Z" , "Tb=Z" , "Tc=Z" , "T=(return)0" }; int n = 48; int main(){ int Tid = 0; cin >> Tid; for ( int i=1;i<=n;i++) cout << str[i] << endl; return 0; } |
I. Barbecue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include<bits/stdc++.h> using namespace std; typedef unsigned long long ull; const int N=1e6+1e3+7; const ull P=(1ull<<61)-1,bs=13131; int n,q; char s[N]; typedef unsigned long long ull; ull mul(ull a,ull b) { ull l1=(uint32_t)a,h1=a>>32,l2=(uint32_t)b,h2=b>>32; ull l=l1*l2,m=l1*h2+l2*h1,h=h1*h2; ull ret=(l&P)+(l>>61)+(h<<3)+(m>>29)+(m<<35>>3)+1; ret=(ret&P)+(ret>>61); ret=(ret&P)+(ret>>61); return ret-1; } ull add(ull x,ull y) { return x+y>=P?x+y-P:x+y; } ull pw[N]; ull hl[N],hr[N]; bool chk( int l, int r) { return add(hl[r],P-mul(hl[l-1],pw[r-l+1]))==add(hr[l],P-mul(hr[r+1],pw[r-l+1])); } int main() { scanf ( "%d%d" ,&n,&q); scanf ( "%s" ,s+1); pw[0]=1; for ( int i=1;i<=n;i++) pw[i]=mul(pw[i-1],bs); for ( int i=1;i<=n;i++) hl[i]=add(mul(hl[i-1],bs),s[i]); for ( int i=n;i>=1;i--) hr[i]=add(mul(hr[i+1],bs),s[i]); while (q--) { int l,r; scanf ( "%d%d" ,&l,&r); if (chk(l,r)) puts ( "Budada" ); else { int len=r-l+1; puts (len&1? "Putata" : "Budada" ); } } } |
J. Frog
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include<bits/stdc++.h> using namespace std; double pi= acos (-1.); struct point { double x,y; point operator+( const point &p) const { return {x+p.x,y+p.y};} point operator-( const point &p) const { return {x-p.x,y-p.y};} point operator*( const double k) const { return {x*k,y*k};} point operator/( const double k) const { return {x/k,y/k};} point turn90() const { return {-y,x};} point turn( const double d) const { return {x* cos (d)-y* sin (d),x* sin (d)+y* cos (d)};} point flip() const { return {x,-y};} double abs () const { return hypot(x,y);} double abs2() const { return x*x+y*y;} point unit() const { return * this / abs ();} }; point getmid( const point &A, const point &B) { point del=B-A; point mid=(A+B)/2.; point t=del.unit().turn90()*( sqrt (1.-del.abs2()/4.)); point C=mid+t,D=mid-t; if (C.abs2()>D.abs2()) return C; return D; } int main() { ios_base::sync_with_stdio( false ); int T; cin>>T; while (T--) { int a,b; cin>>a>>b; double turn=pi*a/180; b-=a; if (b<0)b+=360; int flip=0; if (b>180)flip=1,b=360-b; vector<point> ans; point start{1.,0.},end{ cos (b*pi/180.), sin (b*pi/180.)}; ans.push_back(start); if (b==0) { } else if (b<=90) { ans.push_back(getmid(start,end)); ans.push_back(end); } else if (b<=131) { ans.push_back({1.,1.}); ans.push_back(getmid({1.,1.},end)); ans.push_back(end); } else { ans.push_back({1.,1.}); ans.push_back({0.,1.}); ans.push_back(getmid({0.,1.},end)); ans.push_back(end); } for ( auto &z:ans) { if (flip)z=z.flip(); z=z.turn(turn); } cout<<ans.size()-1<<endl; for ( auto z:ans) { cout<<fixed<<setprecision(10)<<z.x<< ' ' <<z.y<<endl; } } return 0; } |
K. Dynamic Reachability
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | #include<cstdio> #include<vector> #include<algorithm> using namespace std; typedef unsigned long long ull; const int N=50005,M=100005,Q=100005,K=7,CNT=K*64+5; int n,m,q,i,j,k,l,r,x,y,t,op[Q][3]; int id[N],at[CNT],cnt,pool[CNT]; bool vis[N]; int scc,from[N],s[N]; ull mask[N][K],f[CNT][K],F[CNT][K],now[K]; vector< int >g[N],h[N]; struct E{ int u,v; bool active,mark; }e[M]; inline void mark( int x){ if (~id[x]) return ; at[cnt]=x; id[x]=cnt++; } inline bool bfs( int S, int T){ int h,t,i; static ull vis[K]; for (i=0;i<K;i++)vis[i]=0; for (i=0;i<cnt;i++) if (i!=S)vis[i>>6]^=1ULL<<(i&63); pool[h=t=0]=S; while (h<=t){ int x=pool[h++]; if (x==T) return 1; for (i=0;i<K;i++){ ull o=F[x][i]&vis[i]; for (vis[i]^=o;o;o-=o&-o)pool[++t]=(i<<6)+__builtin_ctzll(o); } } return 0; } void dfs( int x){ vis[x]=1; for (vector< int >::iterator j=h[x].begin();j!=h[x].end();j++) if (e[*j].active&&!e[*j].mark&&!vis[e[*j].u]) dfs(e[*j].u); s[++t]=x; } inline void go( int x){ static int q[N]; int h=1,t=1,i,y; q[1]=x; vis[x]=0; from[x]=++scc; for (i=0;i<K;i++)now[i]=0; while (h<=t){ x=q[h++]; if (~id[x])now[id[x]>>6]|=1ULL<<(id[x]&63); for (vector< int >::iterator j=g[x].begin();j!=g[x].end();j++) if (e[*j].active&&!e[*j].mark){ y=e[*j].v; if (vis[y]){ q[++t]=y; vis[y]=0; from[y]=scc; } else if (from[y]<scc){ y=from[y]; now[0]|=mask[y][0]; now[1]|=mask[y][1]; now[2]|=mask[y][2]; now[3]|=mask[y][3]; now[4]|=mask[y][4]; now[5]|=mask[y][5]; now[6]|=mask[y][6]; } } } for (i=0;i<K;i++)mask[scc][i]=now[i]; } int main(){ scanf ( "%d%d%d" ,&n,&m,&q); for (i=1;i<=m;i++){ scanf ( "%d%d" ,&x,&y); g[x].push_back(i); h[y].push_back(i); e[i].u=x; e[i].v=y; e[i].active=1; } for (i=0;i<q;i++){ scanf ( "%d%d" ,&op[i][0],&op[i][1]); if (op[i][0]==2) scanf ( "%d" ,&op[i][2]); } for (i=1;i<=n;i++)id[i]=-1; for (l=0;l<q;l=r){ r=min(q,l+K*32); cnt=0; for (i=0;i<K*64;i++)at[i]=0; for (i=l;i<r;i++){ if (op[i][0]==1){ t=op[i][1]; x=e[t].u; y=e[t].v; e[t].mark=1; } else { x=op[i][1]; y=op[i][2]; } mark(x); mark(y); } scc=t=0; for (i=1;i<=n;i++) if (!vis[i])dfs(i); for (i=n;i;i--) if (vis[s[i]])go(s[i]); for (i=0;i<cnt;i++) for (k=0;k<K;k++)f[i][k]=mask[from[at[i]]][k]; for (i=l;i<r;i++) if (op[i][0]==1){ t=op[i][1]; x=e[t].u; y=e[t].v; e[t].active^=1; } else { for (j=0;j<cnt;j++) for (k=0;k<K;k++)F[j][k]=f[j][k]; for (j=l;j<r;j++) if (op[j][0]==1){ t=op[j][1]; if (e[t].active)F[id[e[t].u]][id[e[t].v]>>6]|=1ULL<<(id[e[t].v]&63); } puts (bfs(id[op[i][1]],id[op[i][2]])? "YES" : "NO" ); } for (i=l;i<r;i++){ if (op[i][0]==1){ t=op[i][1]; x=e[t].u; y=e[t].v; e[t].mark=0; } else { x=op[i][1]; y=op[i][2]; } id[x]=id[y]=-1; } } } |
L. Candy Machine
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include<bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define data dataa #define rep(i,n) for(int i=1;i<=n;i++) typedef long long LL; const int N=1000010; int a[N],n; int main() { scanf ( "%d" ,&n); rep(i,n) scanf ( "%d" ,&a[i]); sort(a+1,a+n+1); int now=0,ans=0; LL sum=0; rep(i,n) { sum+=a[i]; for (;now<i&&(LL)a[now+1]*i<=sum;now++); ans=max(ans,i-now); } printf ( "%d\n" ,ans); return 0; } |
M. BpbBppbpBB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include<bits/stdc++.h> using namespace std; char pattern[11][11]={ "######" , "##..##" , "#....#" , "#....#" , "##..##" , "######" }; int main() { ios_base::sync_with_stdio( false ); int n,m,cnt=0,cnt2=0; cin>>n>>m; vector<string> str(n); for ( int i=0;i<n;i++) { cin>>str[i]; for ( auto ch:str[i]) cnt+=(ch== '#' ); } auto check=[&]( int x, int y) { for ( int i=0;i<6;i++) for ( int j=0;j<6;j++) { if (str[x+i][y+j]!=pattern[i][j]) return false ; } return true ; }; for ( int i=0;i+6<n;i++) { for ( int j=0;j+6<m;j++) { cnt2+=check(i,j); } } //146x+100y=cnt //2x+y=cnt2 //x=(cnt2*100-cnt)/54 long long x54=(cnt2*100ll-cnt); assert (x54>=0 and x54%54==0); int x=x54/54; assert (cnt2-2*x>=0); int y=cnt2-2*x; cout<<x<< ' ' <<y<<endl; return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2016-05-09 BZOJ2448 : 挖油