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; 
}
View Code

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 }
View Code

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 }
View Code

 

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;
}
View Code

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;
}
View Code

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;
}
View Code

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;
}
View Code

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
*/
View Code

 

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;
}
View Code

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  
View Code

T3:

posted @ 2016-10-31 07:50  ACist  阅读(881)  评论(0)    收藏  举报