NOIP五校联测 && NOIP十连测
NOIP十连测:http://begin.lydsy.com/JudgeOnline/contest.php
因为一些版权问题,题目保密不上传;(QQ:1481632287)
Day 1
T1:

#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> #define N 305 using namespace std; char a[N],b[N]; int ans,n,k; int read() { int x=0,f=1; char ch; while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1; while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9'); return x*f; } int get(int l,int r) { int sum=0,tot=0; while (l<=n && r<=n) { if (a[l]==b[r]) l++,r++,sum++; else if (tot<k) l++,r++,sum++,tot++; else {break;} } return sum; } int main() { // freopen("master.in","r",stdin); // freopen("master.out","w",stdout); n=read(); k=read(); scanf("%s",a+1); scanf("%s",b+1); for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) ans=max(ans,get(i,j)); printf("%d\n",ans); return 0; }
T2:

1 /* 2 ²»ÒªµÈµ½¸ßÈýÔÙºó»ÚûѧºÃOI£¡ 3 */ 4 #include<iostream> 5 #include<algorithm> 6 #include<cstring> 7 #include<cstdio> 8 #include<cmath> 9 #include<bitset> 10 #define ll long long 11 #define ld long double 12 #define N 1510 13 using namespace std; 14 int n; 15 bitset<N> e[N],tmp; 16 char s[N]; 17 ll d[N],ans; 18 int read() 19 { 20 int x=0,f=1; char ch; 21 while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1; 22 while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9'); 23 return x*f; 24 } 25 int main() 26 { 27 n=read(); 28 for (int i=1; i<=n; i++) 29 { 30 scanf("%s",s+1); 31 for (int j=1; j<=n; j++) if (s[j]=='1') d[i]++,e[i][j]=1; 32 } 33 for (int i=1; i<=n; i++) 34 for (int j=i+1; j<=n; j++) if (e[i][j])ans+=1ll*(d[i]-1)*(d[j]-1)-(e[i]&e[j]).count(); 35 printf("%lld\n",1ll*ans*2); 36 return 0; 37 }
T3:

1 /* 2 ²»ÒªµÈµ½¸ßÈýÔÙºó»ÚûѧºÃOI£¡ 3 */ 4 #include<iostream> 5 #include<algorithm> 6 #include<cstring> 7 #include<cstdio> 8 #include<cmath> 9 #include<queue> 10 #define ll long long 11 #define ld long double 12 #define N 1300000 13 #define M 700010 14 using namespace std; 15 int n,m,cnt,tot; 16 int pre[M],v[M],now1[N],now2[N],d[N]; 17 queue<int>q; 18 int read() 19 { 20 int x=0,f=1; char ch; 21 while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1; 22 while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9'); 23 return x*f; 24 } 25 void ins(int *now,int x,int y){++tot; pre[tot]=now[x]; now[x]=tot; v[tot]=y; 26 } 27 void get(int x,int val) 28 { 29 if (d[x]>=0) return; 30 d[x]=val; q.push(x); 31 for (int p=now2[x]; p; p=pre[p]) get(v[p],val); 32 if (x>=cnt) return ; 33 for (int i=0; i<20; i++) if ((x&(1<<i))) get(x^(1<<i),val); 34 } 35 int main() 36 { 37 n=read(); m=read(); cnt=1<<20; 38 for (int i=1; i<=n; i++) 39 { 40 int x=read(); ins(now1,cnt+i,x); ins(now2,x,cnt+i); 41 } 42 for (int i=1; i<=m; i++) 43 { 44 int x=read(),y=read(); ins(now1,cnt+x,cnt+y); 45 } 46 for (int i=1; i<=n+cnt; i++) d[i]=-1; 47 get(cnt+1,0); 48 while (!q.empty()) 49 { 50 int x=q.front(); q.pop(); 51 for (int p=now1[x]; p; p=pre[p]) get(v[p],d[x]+1); 52 } 53 for (int i=1; i<=n; i++) printf("%d\n",d[i+cnt]); 54 return 0; 55 56 }
Day 2
T1:

#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> #define N 205 #define M 6500000 using namespace std; int n,m,nn,last,tot; int a[N],ans[N],b[M]; int read() { int x=0,f=1; char ch; while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1; while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9'); return x*f; } int main() { // freopen("div.in","r",stdin); // freopen("div.out","w",stdout); n=read(); m=read(); for (int i=1; i<=m; i++) a[i]=read(),nn=max(a[i],nn); nn=sqrt(nn); nn=min(nn,n); last=n-nn; for (int i=1; i<=nn; i++) { int sum=0; for (int j=1; j<=m; j++) if ((a[j]%i)==0) sum++,b[++tot]=a[j]/i; ans[sum]++; } sort(b+1,b+tot+1); for (int i=1; i<=tot; i++) if (b[i]!=b[i-1] && b[i]>nn && b[i]<=n) { last--; int sum=0; for (int j=1; j<=m; j++) if ((a[j]%b[i])==0) sum++; ans[sum]++; } ans[0]+=last; for (int i=0; i<=m; i++) printf("%d\n",ans[i]); return 0; }
T2:

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; #define maxn 301 #define inf (1e9+1e3) int n,m,sumv; int f[maxn][maxn*maxn]; struct store{ int c,v,t; }a[maxn]; bool operator <(store a,store b){return a.t<b.t;} int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%d%d%d",&a[i].c,&a[i].v,&a[i].t),sumv+=a[i].v; sort(a+1,a+n+1); for (int i=1;i<=sumv;i++) f[0][i]=inf; int pos=1; for (int i=1;i<=n;i++){ for (int j=0;j<=sumv;j++) f[i][j]=f[i-1][j]; for (;a[pos].t<=i&&pos<=n;pos++){ for (int j=sumv;j>=a[pos].v;j--) f[i][j]=min(f[i][j],f[i][j-a[pos].v]+a[pos].c); for (int j=a[pos].v-1;j;j--) f[i][j]=min(f[i][j],f[i][0]+a[pos].c); } } int x,y; while (m--){ scanf("%d%d",&x,&y); int ans=0,l=0,r=sumv+10; while (l<=r){ int mid=(l+r)>>1; if (f[x][mid]<=y) ans=mid,l=mid+1; else r=mid-1; } printf("%d\n",ans); } return 0; }
T3:
Day 3
T1:

#include <cstdio> #include <iostream> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <queue> using namespace std; typedef double db; typedef long long ll; const int N=100010; const db eps=1e-6; db b[N],c[N]; int a[N]; ll ans=0; int n; void solve(int l,int r){ if(l==r) return; int M=l+r>>1; solve(l,M);solve(M+1,r); int i=l,j=M+1,k=l-1; while(i<=M&&j<=r){ if(b[i]<b[j]) c[++k]=b[i++]; else c[++k]=b[j++],ans+=M-i+1; } while(i<=M) c[++k]=b[i++]; while(j<=r) c[++k]=b[j++]; for(i=l;i<=r;i++) b[i]=c[i]; } ll calc(db x){ b[0]=0; for(int i=1;i<=n;i++) b[i]=a[i]-x+b[i-1]; ans=0; solve(0,n); return ans; } int main(){ // freopen("ave.in","r",stdin); // freopen("ave.out","w",stdout); int mx=0,i; db lb,rb,mid; ll x; scanf("%d %lld",&n,&x); for(i=1;i<=n;i++) scanf("%d",&a[i]),mx=max(mx,a[i]); lb=0;rb=mx; while(rb-lb>eps){ mid=(lb+rb)/2; if(calc(mid)<x) lb=mid; else rb=mid; } printf("%.4lf\n",lb); return 0; }
T2:

#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> #define base 998244353 #define N 105 using namespace std; struct map{ int a[N][N]; }tmp,ans; int f[N][N],c[N][N]; int n,m,p,q,sum; int read() { int x=0,f=1; char ch; while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1; while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9'); return x*f; } map operator *(map a,map b){ map c; for (int i=1; i<=p; i++) for (int j=1; j<=p; j++) { c.a[i][j]=0; for (int k=1; k<=p; k++) c.a[i][j]=(c.a[i][j]+1ll*a.a[i][k]*b.a[k][j])%base; } return c; } int fastpower(int x,int k){ int ans=1; for (int i=k; i; i>>=1,x=1ll*x*x%base) if (i&1) ans=(1ll*ans*x)%base; return ans; } int main() { /// freopen("color.in","r",stdin); // freopen("color.out","w",stdout); n=read(); m=read(); p=read(); q=read(); f[0][0]=1; for (int i=1; i<=n; i++) for (int j=1; j<=p; j++) f[i][j]=(1ll*f[i-1][j-1]*(p-j+1)%base+1ll*f[i-1][j]*j%base)%base; c[0][0]=1; for (int i=1; i<=p; i++) { c[i][0]=c[i][i]=1; for (int j=1; j<i; j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%base; } for (int j=1; j<=p; j++) for (int k=1; k<=p; k++) { for (int x=max(q,max(j,k)); x<=min(p,j+k); x++) tmp.a[j][k]=(tmp.a[j][k]+1ll*c[j][j+k-x]*c[p-j][x-j])%base; tmp.a[j][k]=1ll*f[n][k]*tmp.a[j][k]%base*fastpower(c[p][k],base-2)%base; } for (int i=1; i<=p; i++) ans.a[i][i]=1; m--; for (int i=m; i; i>>=1,tmp=tmp*tmp) if (i&1) ans=ans*tmp; for (int i=1; i<=p; i++) for (int j=1; j<=p; j++) sum=(sum+1ll*f[n][i]*ans.a[i][j]%base)%base; printf("%d\n",sum); return 0; }
T3:

#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> #include<vector> #define N 100005 #define M 100005*5 #define ll long long using namespace std; vector<int>sum[M]; int n,m,q,a[N]; ll ans,lastans; int read() { int x=0,f=1; char ch; while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1; while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9'); return x*f; } void ins(int k,int l,int r,int x,int y,int val) { // if (k!=0) // cout<<k<<" "<<l<<" "<<r<<" "<<x<<" "<<y<<" "<<val<<endl; if (x<=l && r<=y) {sum[k].push_back(val); return;} int mid=(l+r)>>1; if (x<=mid) ins(k*2,l,mid,x,y,val); if (mid<y) ins(k*2+1,mid+1,r,x,y,val); } void get_sort(int k,int l,int r) { // cout<<" "<<k<<" "<<l<<" "<<r<<endl; sort(sum[k].begin(),sum[k].end()); if (l==r) return ; int mid=(l+r)>>1; get_sort(k*2,l,mid); get_sort(k*2+1,mid+1,r); } int get(int k,int x) { int l=0,r=sum[k].size()-1,pos=-1; while (l<=r) { int mid=(l+r)>>1; if (sum[k][mid]<=x) pos=mid,l=mid+1; else r=mid-1; } return pos+1; } int change(int k,int l,int r,int pos,int y) { // cout<<" "<<k<<" "<<l<<" "<<r<<" "<<pos<<" "<<y<<endl; int sum=0; sum+=get(k,y); int mid=(l+r)>>1; if (l==r) {return sum;} if (pos<=mid) sum+=change(k*2,l,mid,pos,y); else sum+=change(k*2+1,mid+1,r,pos,y); return sum; } int main() { // freopen("seq.in","r",stdin); // freopen("seq.out","w",stdout); n=read(); m=read(); q=read(); for (int i=1; i<=n; i++) a[i]=read(); for (int i=1; i<=m; i++) {int l=read(),r=read(),x=read(); ins(1,1,n,l,r,x);} get_sort(1,1,n); ans=lastans=0;// cout<<"==================================="<<endl; for (int i=1; i<=n; i++) ans+=change(1,1,n,i,a[i]); lastans=ans; printf("%lld\n",ans); for (int i=1; i<=q; i++) { int x=read()^lastans,y=read()^lastans; ans=lastans; ans-=change(1,1,n,x,a[x]); ans+=change(1,1,n,x,y); a[x]=y; lastans=ans; printf("%lld\n",lastans); } return 0; } /* 4 2 2 1 4 2 3 2 4 3 1 3 2 6 6 2 7 */
Day 4
T1:

#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> using namespace std; int read() { int x=0,f=1; char ch; while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1; while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9'); return x*f; } int main() { // freopen("osiris.in","r",stdin); // freopen("osiris.out","w",stdout); int T=read(); while (T--) { int a,b,c,x,y,z; bool bo=true; a=read(),b=read(),c=read(),x=read(),y=read(),z=read(); int sum=0; if (a>x) sum+=((a-x)/2),a-=(a-x)/2*2; // cout<<" "<<sum<<endl; if (b>y) sum+=((b-y)/2),b-=(b-y)/2*2; if (c>z) sum+=((c-z)/2),c-=(c-z)/2*2; // cout<<" "<<a<<" "<<b<<" "<<c<<" "<<x<<" "<<y<<" "<<z<<" "<<sum<<endl; if (a<x) sum-=(x-a); if (b<y) sum-=(y-b); if (c<z) sum-=(z-c); // cout<<" "<<sum<<endl; if (sum>=0) printf("YES\n"); else printf("NO\n"); } return 0; }
T2:

1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath> 6 #define ll long long 7 using namespace std; 8 const int N=17,M=1<<17,base=1e9+7; 9 int n,m,g[N][N],f[M],num[M],bin[N*N],a[M],b[M]; 10 11 int read() 12 { 13 int x=0,f=1; char ch; 14 while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1; 15 while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9'); 16 return x*f; 17 } 18 int main() 19 { 20 n=read(); m=read(); 21 for (int i=1; i<=m; i++){int u=read()-1,v=read()-1; g[u][v]=1;} 22 bin[0]=1; for (int i=1; i<=n*n; i++) bin[i]=(bin[i-1]*2)%base; 23 int maxn=(1<<n)-1; 24 num[0]=-1; f[0]=1; 25 for (int i=1; i<=maxn+1; i++) num[i]=num[i>>1]*(i&1?-1:1); 26 for (int i=0; i<maxn; i++) 27 { 28 for (int j=0; j<n; j++) b[1<<j]=0; 29 for (int j=0; j<n; j++) 30 if (i&(1<<j)) 31 for (int k=0; k<n; k++) b[1<<k]+=g[j][k]; 32 int t=maxn-i; a[0]=0; 33 for (int s=(t-1)&t;;s=(s-1)&t) 34 { 35 int now=(s^t),las=now&-now; 36 a[now]=a[now^las]+b[las]; 37 f[now^i]=(f[now^i]+num[now]*bin[a[now]]%base*(ll)f[i]%base)%base; 38 if (s==0) break; 39 } 40 } 41 cout<<(f[maxn]+base)%base<<endl; 42 return 0; 43 } 44
T3:
我太蒟蒻了,所以神犇们留下意见让我跪膜