【noip2016】

noip2016

玩具パズル

シミュレーション

int main(){
    rd(n),rd(m);
    for(int i=1;i<=n;i++) scanf("%d%s",&cx[i],name[i]);
    int cur=1,x;
    for(int i=1;i<=m;i++){
        scanf("%d%d",&fx,&x);
        if(fx^cx[cur]) cur=(cur+x)%n;
        else cur=(cur+n-x)%n;
        if(cur==0) cur=n;
    }
    printf("%s",name[cur]);
    return 0;
}

他の教室で

void floyd(){
    for(int i=1;i<=nn;++i) mp[i][i]=0;
        for(int k=1;k<=nn;++k)
            for(int i=1;i<=nn;++i)
                for(int j=1;j<i;++j)
                    if(mp[i][j]>(ll)mp[i][k]+mp[k][j]) mp[i][j]=mp[j][i]=mp[i][k]+mp[k][j];
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
#endif
    rd(n),rd(m),rd(nn),rd(mm);
    for(int i=1;i<=n;++i) rd(a[i]);
    for(int i=1;i<=n;++i) rd(b[i]);
    for(int i=1;i<=n;++i) scanf("%lf",&c[i]);
    memset(mp,inf,sizeof(mp));
    for(int i=1,u,v,w;i<=mm;++i) rd(u),rd(v),rd(w),mp[u][v]=mp[v][u]=Min(w,mp[u][v]);
    floyd();
    for(int i=1;i<=n;++i)
        for(int j=0;j<=m;++j) f[i][j][0]=f[i][j][1]=inf;
    f[1][0][0]=f[1][1][1]=0;
    for (int i=2;i<=n;i++)
        for (int j=0;j<=m;j++){
            double k1=c[i-1],k2=c[i];
            int x=mp[b[i-1]][a[i]],y=mp[b[i-1]][b[i]],z=mp[a[i-1]][a[i]],w=mp[a[i-1]][b[i]];
            f[i][j][0]=min(f[i-1][j][1]+k1*x+ (1-k1)*z, f[i-1][j][0] +z);
            if(j) f[i][j][1]=min(f[i-1][j-1][0]+k2*w+(1-k2)*z,f[i-1][j-1][1]+k1*k2*y+k1*(1-k2)*x+(1-k1)*k2*w+(1-k1)*(1-k2)*z);
        }
    for(int i=0;i<=m;++i) ans=Min(ans,Min(f[n][i][0],f[n][i][1]));
    printf("%.2lf",ans);
    return 0;
}

愛は毎日ジョギング

最初にグーをQAQだろう、私は再びそれをしません

問題の番号の組み合わせ

 int t,k,a[2001][2001],ans[2001][2001],n[10001],m[10001];
int main(){
    int x=0;
    rd(t),rd(k);
    for(int i=1;i<=t;++i) rd(n[i],rd(m[i]),x=(n[i]>x)?n[i]:x;
    for(int i=1;i<=x;++i) a[1][i]=i%k,ans[1][i]+=(!a[1][i]);
    for(int i=2;i<=x;++i)
        for (int j=2;j<=i;++j) a[j][i]=(a[j-1][i-1]+a[j][i-1])%k,ans[j][i]+=(!a[j][i]);
    for(int i=1;i<=x;++i)
        for(int j=1;j<=x;++j) ans[j][i]+=ans[j-1][i]+ans[j][i-1]-ans[j-1][i-1];
    for (int i=1;i<=t;i++) printf("%d\n",ans[Min(n[i],m[i])][n[i]]);
}

蚯蚓

まず、スタックを実装することができる\(O((N + M )ログ\ N)\)

あなたはカットしていない場合は、すべてがミミズの長さの大きさとの関係を変更しないことに注意してください

もし\(T_L \)の時間カットの初期長さ(\ X)\ミミズ、\(T_2 \)初期長カット時間\(Y \)ミミズ、前記\(T_1 <T_2、X> Y \)知ることができる(X \)\、より一層そう長さを増加させる、初期ミミズの長ダウンタイムカット\(X \)第一のカットダウンより時定数\(Y \)の長さが満たされるダウンタイムカット単調

第三の記憶の最初のカットの最初のオープンリザーバ3つのキュー第2の原貯蔵ミミズ第二カット

int n,m,q,u,v,t,h1,h2,t2,h3,t3,h4,q1[N],q2[M],q3[M],q4[N+M];
double p;
bool cmp(int x,int y){return x>y;}
int calc(int nw){
    int x=q1[h1]+q*nw,y=q2[h2]+q*(nw-h2),z=q3[h3]+q*(nw-h3);
    if(n>=h1&&x>=y&&x>=z) return ++h1,x;
    else if(h2<=t2&&y>=z) return ++h2,y;
    else if(h3<=t3) return ++h3,z;
    return -1;
}
int main(){
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
#endif
    rd(n),rd(m),rd(q),rd(u),rd(v),rd(t),p=1.0*u/(v*1.0);
    for(int i=1;i<=n;++i) rd(q1[i]);
    sort(q1+1,q1+n+1,cmp);
    h1=h2=h3=h4=1,t2=t3=0;
    for(int i=0,x,y,z;i<m;++i){
        x=calc(i);
        if(!((i+1)%t)) printf("%d ",x);
        q2[++t2]=y=floor((double)x*p),q3[++t3]=x-y;
    }puts("");
    while(q4[h4]=calc(m),q4[h4]+1) ++h4;
    for(int i=t;i<h4;i+=t) printf("%d ",q4[i]);puts("");
    return 0;
}

怒っている鳥

二点DP形圧力が豚の数を扱うことができる2つのポイントで各前処理のための放物線の原点を通る放物線を定義します

プロセスのデバッグは本当に何サンパウロ操作を実行しようとしていない私たちに伝えるためにエキサイティングなものではありません

void qab(double &a,double &b,double x1,double y1,double x2,double y2){
    a=(x2*y1-x1*y2)/(x1*x2*(x1-x2)),b=(x1*x1*y2-x2*x2*y1)/(x1*x2*(x1-x2));
}

void pre(){
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            if(fabs(x[i]-x[j])<eps) continue;
            double a,b;
            qab(a,b,x[i],y[i],x[j],y[j]);
            if(a>-eps) continue;
            for(int k=1;k<=n;k++)
                if(fabs(a*x[k]*x[k]+b*x[k]-y[k])<eps) pw[i][j]|=(1<<(k-1));
        }
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
#endif
    int T;rd(T);
    for(int i=0,j;i<(1<<18);i++){
        for(j=1;j<=18&&(i&(1<<(j-1)));j++);c[i]=j;  
    }
    while(T--){
        memset(pw,0,sizeof(pw));
        memset(f,inf,sizeof(f));f[0]=0;
        rd(n),rd(m);
        for(int i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);
        pre();
        for(int i=0,j;i<(1<<n);i++){
            j=c[i],f[i|(1<<(j-1))]=min(f[i|1<<(j-1)],f[i]+1);
            for(int k=1;k<=n;k++) f[i|pw[j][k]]=min(f[i|pw[j][k]],f[i]+1);
        }
        printf("%d\n",f[(1<<n)-1]);
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/lxyyyy/p/11813025.html