联赛订正

我知道我为什么会爆炸了,而且是每道题都爆炸的样子。

赛场上漏看好多题意,直到订正了才发现,简直可以拍死自己。

“用来反复读题的时间永远不算你浪费” 亲测有效。555555......

D1T1:小学以来第一次挂T1.里程碑式错误m打成n。本地没报错(其实文件读入少了应该报的)+两个样例给我开绿灯=rp--(我五年级比赛T1都比这难啊(′д` )…彡…彡)

#include<cstdio>
#include<algorithm>
#define N 101012
int n,m,a[N];
char s[N][20];
int main()
{
//    freopen("toy5.in","r",stdin);freopen("toy.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);scanf("%s",s[i]);
    }
    int now=1;
    for(int i=1;i<=m;i++){
        int ff,x;scanf("%d%d",&ff,&x);
        if(ff==0){
            if(a[now]==0)ff=1;
        }else{
            if(a[now]==0)ff=0;
        }
        x=x%n;
        if(ff==0)now+=x;else now=now-x;now=(now+n)%n;if(now==0)now=n;
    }
    printf("%s",s[now]);
    return 0;
//    fclose(stdin);fclose(stdout);
}

toy

D1T2:因为之前被R老师的树形DP套题套住了,加之看起来T2不像树形DP就没冲着标算去。一堆部分分。。。敲敲敲。。。算是唯一一道写得比较满意的。。。但是暴力分少,不服。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 300010
#define M 600010

int edgenum,edge3,edgenew,tm,st[N],ed[N],cnt=0,n,m;
int dfn[N],mx[N],dep[N],w[N],ans[N],fa[N][20],next[M],next3[M],head3[M],vet3[M],pri[M],rt[M],vet[M],nextnew[M],vetnew[M];
int head[N],headnew[M],id[M],tt[M];
inline void add(int u,int v){
    edgenum++;vet[edgenum]=v;next[edgenum]=head[u];head[u]=edgenum;
}
void addnew(int u,int v,int w){
    if(u==0)return;//printf("%d %d %d\n",u,v,w);
    edgenew++;vetnew[edgenew]=v;nextnew[edgenew]=headnew[u];headnew[u]=edgenew;
    pri[edgenew]=w;
}
void add3(int u,int v,int t,int w){
    //printf("%d %d %d %d\n",t,u,v,w);
    edge3++;vet3[edge3]=v;next3[edge3]=head3[u];head3[u]=edge3;id[edge3]=t;tt[edge3]=w;
}
void dfs(int u,int ff){
    int e=head[u];tm++;dfn[u]=tm;mx[u]=tm;
    //printf("%d\n",u);
    while(e>0){
        int v=vet[e];//printf("%d\n",v);
        if(v!=ff){
            dep[v]=dep[u]+1;fa[v][0]=u;
            dfs(v,u);
            mx[u]=mx[v];
        }
        e=next[e];
    }
}
void search1(int u,int ff){
    int e=headnew[u];
    while(e>0){
        int v=vetnew[e],w=pri[e];
        rt[v]+=w;
        e=nextnew[e];
    }
    e=head3[dfn[u]];
    while(e>0){
        int v=vet3[e];
        ans[id[e]]+=rt[v]*tt[e];
        e=next3[e];
    }
    e=head[u];
    while(e>0){
        int v=vet[e];
        if(v!=ff){search1(v,u);}
        e=next[e];
    }
}
void search2(int u,int ff){
    int e=headnew[u];
    while(e>0){
        int v=vetnew[e],w=pri[e];
        rt[v]+=w;
        e=nextnew[e];
    }

        //printf("======%d %d \n",u,ans[1]);

    e=head3[dfn[u]];
    while(e>0){
        int v=vet3[e];
        ans[id[e]]+=rt[v]*tt[e];
        e=next3[e];
    }
    e=head[u];
    while(e>0){
        int v=vet[e];
        if(v!=ff){search2(v,u);}
        e=next[e];
    }
}
inline int lca(int x,int y){
    if(dep[x]<dep[y])std::swap(x,y);
    for(int i=18;i>=0;i--)if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
    for(int i=18;i>=0;i--)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
    if(x!=y)x=fa[x][0];return x;
}
void clear(){
    edgenew=0;edge3=0;memset(headnew,0,sizeof(headnew));
    memset(head3,0,sizeof(head3));memset(rt,0,sizeof(rt));
}
int main()
{
//freopen("running.in","r",stdin);freopen("running.out","w",stdout);
    int size = 256 << 20; // 256MB
    char *p = (char*)malloc(size) + size;
    __asm__("movl %0, %%esp\n" :: "r"(p));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n-1;i++){
        int u,v;scanf("%d%d",&u,&v);
        add(u,v);add(v,u);
    }
    dep[1]=1,tm=0;dfs(1,0);
    for(int i=1;i<=18;i++)for(int j=1;j<=n;j++)fa[j][i]=fa[fa[j][i-1]][i-1];
    for(int i=1;i<=n;i++)scanf("%d",&w[i]);
    for(int i=1;i<=m;i++)scanf("%d%d",&st[i],&ed[i]);
    for(int i=1;i<=m;i++){
        int ff=lca(st[i],ed[i]);
        int x=dep[st[i]]+300000;
        addnew(st[i],x,1);addnew(fa[ff][0],x,-1);
    }
    for(int i=1;i<=n;i++){
        int L=dfn[i],R=mx[i],x=dep[i]+w[i]+300000;
        if(x>=0&&x<=600000)add3(R,x,i,1),add3(L-1,x,i,-1);
    }
    search1(1,0);
    //for(int i=1;i<=n;i++)printf("%d ",ans[i]);printf("\n");
    clear();
    for(int i=1;i<=m;i++){
        int ff=lca(st[i],ed[i]);
        int x=dep[st[i]]-2*dep[ff]+300000;
        addnew(ed[i],x,1);addnew(ff,x,-1);
    }
    for(int i=1;i<=n;i++){
        int L=dfn[i],R=mx[i],x=w[i]-dep[i]+300000;
        if(x>=0&&x<=600000)add3(R,x,i,1),add3(L-1,x,i,-1);
    }
    search2(1,0);
    for(int i=1;i<n;i++)printf("%d ",ans[i]);printf("%d",ans[n]);
    return 0;
}

running(标算写法)

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 300010
#define M 600010

int edgenum,edgenew,tm,st[N],ed[N],cnt=0,n,m,u,v;
int dfn[N],mx[N],dep[N],w[N],ans[N],fa[N][20],next[M],pri[M],rt[M],vet[M],nextnew[M],vetnew[M];
int head[N],headnew[M];
struct node{int sum,l,r;}tree[M*20];
inline void add(int u,int v){
    edgenum++;vet[edgenum]=v;next[edgenum]=head[u];head[u]=edgenum;
}
void addnew(int u,int v,int w){
    if(u==0)return;if(v<0||v>600000)v=0;
    edgenew++;vetnew[edgenew]=v;nextnew[edgenew]=headnew[u];headnew[u]=edgenew;
    pri[edgenew]=w;
}
void dfs(int u,int ff){
    int e=head[u];tm++;dfn[u]=tm;mx[u]=tm;
    //printf("%d\n",u);
    while(e>0){
        int v=vet[e];//printf("%d\n",v);
        if(v!=ff){
            dep[v]=dep[u]+1;fa[v][0]=u;
            dfs(v,u);
            mx[u]=mx[v];
        }
        e=next[e];
    }
}
void insert(int &p,int x,int st,int ed,int v){
    if(p==0)p=++cnt,tree[p].sum=0;
    tree[p].sum+=v;if(st==ed)return;
    int mid=(st+ed)/2;
    if(x<=mid)insert(tree[p].l,x,st,mid,v);else insert(tree[p].r,x,mid+1,ed,v);
}
inline int query(int p,int l,int r,int st,int ed){
    if(p==0)return 0;
    if(l==st&&r==ed)return tree[p].sum;
    int mid=(st+ed)/2;
    if(r<=mid)return query(tree[p].l,l,r,st,mid);else
     if(l>mid)return query(tree[p].r,l,r,mid+1,ed);else
      return query(tree[p].l,l,mid,st,mid)+query(tree[p].r,mid+1,r,mid+1,ed);
}
void search1(int u,int ff){
    int e=head[u];
    while(e>0){
        int v=vet[e];
        if(v!=ff){search1(v,u);}
        e=next[e];
    }
    e=headnew[u];
    while(e>0){
        int v=vetnew[e],w=pri[e];
        insert(rt[v],dfn[u],1,n,w);
        e=nextnew[e];
    }
    int tmp=dep[u]+w[u]+300000;
    if(tmp>0&&tmp<=600000)ans[u]+=query(rt[tmp],dfn[u],mx[u],1,n);
}
inline void search2(int u,int ff){
    int e=head[u];
    while(e>0){
        int v=vet[e];
        if(v!=ff)search2(v,u);
        e=next[e];
    }e=headnew[u];
    while(e>0){
        int v=vetnew[e],w=pri[e];
        insert(rt[v],dfn[u],1,n,w);
        e=nextnew[e];
    }
    int tmp=w[u]-dep[u]+300000;
    if(tmp>0&&tmp<=600000)ans[u]+=query(rt[tmp],dfn[u],mx[u],1,n);
}
inline int lca(int x,int y){
    if(dep[x]<dep[y])std::swap(x,y);
    for(int i=18;i>=0;i--)if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
    for(int i=18;i>=0;i--)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
    if(x!=y)x=fa[x][0];return x;
}
int main()
{
    int size = 256 << 20; // 256MB
    char *p = (char*)malloc(size) + size;
    __asm__("movl %0, %%esp\n" :: "r"(p));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n-1;i++){
        int u,v;scanf("%d%d",&u,&v);
        add(u,v);add(v,u);
    }
    dep[1]=1,tm=0;dfs(1,0);
    for(int i=1;i<=18;i++)for(int j=1;j<=n;j++)fa[j][i]=fa[fa[j][i-1]][i-1];
    for(int i=1;i<=n;i++)scanf("%d",&w[i]);
    for(int i=1;i<=m;i++)scanf("%d%d",&st[i],&ed[i]);
    for(int i=1;i<=m;i++){
        int ff=lca(st[i],ed[i]);
        int x=dep[st[i]]+300000;
        addnew(st[i],x,1);addnew(fa[ff][0],x,-1);
    }
    search1(1,0);
    edgenew=0;memset(headnew,0,sizeof(headnew));
    cnt=0;memset(rt,0,sizeof(rt));
    memset(tree,0,sizeof(tree));
    for(int i=1;i<=m;i++){
        int ff=lca(st[i],ed[i]);
        int x=dep[st[i]]-2*dep[ff]+300000;
        addnew(ed[i],x,1);addnew(ff,x,-1);
    }
    search2(1,0);
    for(int i=1;i<n;i++)printf("%d ",ans[i]);printf("%d",ans[n]);
    return 0;
}

running(权值线段树写法)

#include<cstdio>
#include<algorithm>
#define N 300020
#define M 600020
int n,m,edgenum,uu,vv,t1,t2;
struct node{
    int d,l;
}b[N],c[N];
int vet[M],st[N],ok[N],down[N],up[N],ed[N],w[N],head[N],next[M],dep[N],ans[N];
void add(int u,int v){
    edgenum++;vet[edgenum]=v;next[edgenum]=head[u];head[u]=edgenum;
}
void dfs(int u,int ff){
    int e=head[u];
    while(e>0){
        int v=vet[e];
        if(v!=ff){
            dep[v]=dep[u]+1;//fa[v][0]=1;if(dep[v]==w[v])pre[v][0]=1;
            dfs(v,u);
        }
        e=next[e];
    }
}
void pao(int u,int ff,int tm){
    if(u==vv){ok[u]=1;}
    //printf("%d %d %d\n",u,ff,tm);
    int e=head[u];
    while(e>0){
        int v=vet[e];
        if(v!=ff){
            pao(v,u,tm+1);
            if(ok[v]==1){
                ok[u]=1;
            }
        }
        e=next[e];
    }
    //printf("%d %d %d\n",u,ok[u],tm);
    if(ok[u]==1)if(w[u]==tm)ans[u]++;
}
void work1(){
    for(int i=1;i<=m;i++){
        uu=st[i],vv=ed[i];
        for(int i=1;i<=n;i++)ok[i]=0;
        pao(uu,0,0);
    }
    for(int i=1;i<=n;i++)printf("%d ",ans[i]);
}
void go(int u,int ff){
    int e=head[u];
    while(e>0){
        int v=vet[e];
        if(v!=ff){
            go(v,u);ok[u]+=ok[v];
        }
        e=next[e];
    }if(dep[u]==w[u])ans[u]=ok[u];
}
void work2(){
    for(int i=1;i<=m;i++){
        uu=st[i],vv=ed[i];
        ok[vv]++;
    }
    go(1,0);for(int i=1;i<=n;i++)printf("%d ",ans[i]);
}
bool cmp2(node a,node b){
    if(a.d==b.d)return a.l>b.l;
    return a.d<b.d;
}
int find1(int x,int y){
    int l=1,r=t1;
    while(l<r){
        int mid=(l+r)/2;
        if(b[mid].d<x)l=mid+1;else r=mid;
    }if(b[l].d!=x)return 0;
    r=t1;int now=l;
    while(l+1<r){
        int mid=(l+r)/2;
        if(b[mid].d>x)r=mid-1;else{
            if(b[mid].l<y)r=mid-1;else l=mid;
        }
    }
    //printf("<>==%d %d %d %d\n",x,y,now,l);
    if(b[r].l>=y&&b[r].d==x)l=r;if(b[l].l>=y&&b[l].d==x)return l-now+1;else return 0;
}
int find2(int x,int y){
    int l=1,r=t2;
    while(l<r){
        int mid=(l+r)/2;
        if(c[mid].d<x)l=mid+1;else r=mid;
    }if(c[l].d!=x)return 0;
    r=t2;int now=l;
    while(l+1<r){
        int mid=(l+r)/2;
        if(c[mid].d>x)r=mid-1;else{
            if(c[mid].l<y)r=mid-1;else l=mid;
        }
    }
    //printf("<>==%d %d %d %d\n",x,y,now,l);
    if(c[r].l>=y&&c[r].d==x)l=r;if(c[l].l>=y&&c[l].d==x)return l-now+1;else return 0;
}
void work3()
{
    for(int i=1;i<=m;i++){
        int uu=st[i],vv=ed[i];
        if(dep[uu]>dep[vv]){
            t1++;b[t1].d=dep[uu];b[t1].l=-dep[vv]+dep[uu];
        }else{
            t2++;c[t2].d=dep[uu];c[t2].l=-dep[uu]+dep[vv];
        }
    }
    std::sort(b+1,b+t1+1,cmp2);std::sort(c+1,c+t2+1,cmp2);
    //for(int i=1;i<=t1;i++)printf("==%d %d\n",i,b[i].d,b[i].l);
    for(int i=1;i<=n;i++){
        int x=dep[i]+w[i],y=dep[i]-w[i];
        if(x>=0&&x<=n)ans[i]+=find1(x,w[i]);
        if(y>=0&&y<=n)ans[i]+=find2(y,w[i]);
        //printf("aaa==%d %d %d %d\n",ans[i],w[i],x,y);
    }
    for(int i=1;i<=n;i++)printf("%d ",ans[i]);
}
int main()
{
    freopen("running.in","r",stdin);freopen("running.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n-1;i++){
        int u,v;scanf("%d%d",&u,&v);add(u,v);add(v,u);
    }dep[1]=0;dfs(1,0);
    for(int i=1;i<=n;i++)scanf("%d",&w[i]);
    for(int i=1;i<=m;i++){scanf("%d%d",&st[i],&ed[i]);}
    //work3();return 0;
    if(n<1000){
       work1();return 0;
    }
    if(n%10==5){work2();return 0;}
    work3();
    return 0;
    fclose(stdin);fclose(stdout);
}

然后蛮想贴一个赛场上的暴力,感谢不写挂,唯一比去年进步的代码能力,整场唯一的安慰

P.S.

酒店的电梯里,某司机:链怎么搞啊?猪猪侠:链不是随便都可以搞啊?

我的内心OS:???确乎都可以搞,但确乎不是随便搞啊,最后快调吐血惹,果然人弱差太多。。哎。。。

D1T3:日。。。犯了一个毛主力“初三犯过的错误”,当时多想了一下+没有对拍=rp--,没有什么分。。。

#include<cstdio>
#include<algorithm>
#define N 2020
#define M 100010
#define inf 1000000000
int n,m,V,E;
int dis[303][303],c[N],d[N];
double p[N];
double f[2020][2020],g[2020][2020];
double min(double a,double b){if(a<b)return a;else return b;}
int main()
{
    scanf("%d%d%d%d",&n,&m,&V,&E);
    for(int i=1;i<=n;i++)scanf("%d",&c[i]);
    for(int i=1;i<=n;i++)scanf("%d",&d[i]);
    for(int i=1;i<=n;i++)scanf("%lf",&p[i]);
    for(int i=1;i<=V;i++)
     for(int j=1;j<=V;j++)if(i!=j)dis[i][j]=inf;
    for(int i=1;i<=E;i++){
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        if(w<dis[u][v])dis[u][v]=w,dis[v][u]=w;
    }
    for(int k=1;k<=V;k++)
     for(int i=1;i<=V;i++)
      for(int j=1;j<=V;j++)if(i!=k&&i!=j&&k!=j){
          if(dis[i][k]+dis[k][j]<dis[i][j])dis[i][j]=dis[i][k]+dis[k][j];
      }
    double ans=1000000000.0;
    g[1][0]=ans;
    for(int i=2;i<=n;i++){
     f[i][0]=f[i-1][0]+dis[c[i-1]][c[i]];
     g[i][0]=1000000000.0;
     for(int j=1;j<=m;j++){
         f[i][j]=ans,g[i][j]=ans;
         f[i][j]=min(f[i][j],f[i-1][j]+dis[c[i]][c[i-1]]);
         f[i][j]=min(f[i][j],g[i-1][j]+(1.0-p[i-1])*dis[c[i]][c[i-1]]+p[i-1]*dis[d[i-1]][c[i]]);
         g[i][j]=min(g[i][j],f[i-1][j-1]+p[i]*dis[c[i-1]][d[i]]+(1.0-p[i])*dis[c[i-1]][c[i]]);
         g[i][j]=min(g[i][j],g[i-1][j-1]+p[i]*p[i-1]*dis[d[i-1]][d[i]]+p[i]*(1.0-p[i-1])*dis[d[i]][c[i-1]]+
                    (1.0-p[i])*(1.0-p[i-1])*dis[c[i]][c[i-1]]+p[i-1]*(1.0-p[i])*dis[c[i]][d[i-1]]);
     }
    }
    for(int j=0;j<=m;j++){
      if(f[n][j]<ans)ans=f[n][j];if(g[n][j]<ans)ans=g[n][j];
    }
    printf("%.2lf",ans);
    return 0;
} 

classroom(以后再也不要写生成树了呜呜呜)

D2T1:对拍了所以没有挂T1??

#include<cstdio>
#include<algorithm>
int n,m,cas,k;
int f[2020][2020],sum[2020][2020];
int main()
{
    freopen("problem.in","r",stdin);freopen("problem.out","w",stdout);
    scanf("%d%d",&cas,&k);f[0][0]=1;
    for(int i=1;i<=2000;i++){
        f[i][0]=1;
        for(int j=1;j<=i;j++){
             f[i][j]=(f[i-1][j-1]+f[i-1][j])%k;
        }
    }
    for(int i=0;i<=2000;i++)for(int j=0;j<=i;j++)if(f[i][j]==0)sum[i][j]=1;
    for(int i=0;i<=2000;i++){
        for(int j=1;j<=2000;j++){
            sum[i][j]=sum[i][j]+sum[i][j-1];
        }
    }
    while(cas--){
        scanf("%d%d",&n,&m);int ans=0;
        for(int i=0;i<=n;i++)
        {
            int k=i;if(k>m)k=m;ans+=sum[i][k];
        }
        printf("%d\n",ans);
    }
    return 0;
    fclose(stdin);fclose(stdout);
}

problem(这题写得不够优美因为赛场上懒得做二维前缀和)

D2T2:这么多部分分?我没有看见啊////第一天T2写得好辛苦导致第二天敲完堆逃,听到大家用链表之类怎么骗得开心,论心里阴影面积有多大。

#include<cstdio>
#include<algorithm>
#define N 8000000
#define ll long long
using namespace std;
int n,m,q,U,V,t,tot;
int a[N],b[N],c[N],d[N];
int main()
{
    scanf("%d%d%d%d%d%d",&n,&m,&q,&U,&V,&t);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    sort(a+1,a+n+1);reverse(a+1,a+n+1);
    int t1=1,w1=n,t2=1,w2=0,t3=1,w3=0;
    for(int cas=1;cas<=m;cas++){
        int x=-1000000000,ff=-1;
        if(t1<=w1){if(a[t1]>x)x=a[t1],ff=1;}
        if(t2<=w2){if(b[t2]>x)x=b[t2],ff=2;}
        if(t3<=w3){if(c[t3]>x)x=c[t3],ff=3;}
        if(ff==1)t1++;if(ff==2)t2++;if(ff==3)t3++;
        x=x+(cas-1)*q;
        if(cas%t==0){if(cas+t>m)printf("%d",x);else printf("%d ",x);}
        int L=(ll)x*U/V;
        w2++;b[w2]=L-q*cas;w3++;c[w3]=x-L-q*cas;
    }
    printf("\n");
    for(int i=t1;i<=w1;i++){tot++;d[tot]=a[i]+m*q;}
    for(int i=t2;i<=w2;i++){tot++;d[tot]=b[i]+m*q;}
    for(int i=t3;i<=w3;i++){tot++;d[tot]=c[i]+m*q;}
    sort(d+1,d+tot+1);
    reverse(d+1,d+tot+1);
    for(int i=1;i<=tot;i++)if(i%t==0){
        if(i+t>tot)printf("%d",d[i]);else printf("%d ",d[i]);
        }
    return 0;
} 

earthworm(怎么回事啊luogu上面被卡成65分)

D2T3:还分上取整下取整?我没有看见啊////考场上爽快地用给的m剪枝,一眼看过去全部都是高斯记号嘛,又想当然了,原来我还是适合一个字一个字手指着电脑读题目。。QAQ

#include<cstdio>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
int n,m,ans,tot,cas;
int ok[30];ll dp[30][30];int f[500000];
double eps=0.00000001;
struct node{
    double x,y;
}a[30];
struct wxx{
    double a,b;
}b[30];
double aabs(double x){
    if(x<-eps)return -x;else return x;
}
int main()
{

    scanf("%d",&cas);
    while(cas--){
        scanf("%d%d",&n,&m);ans=n;    if (m == 1) ans = ceil((double) n / 3 + 1.0);
        for(int i=1;i<=n;i++)scanf("%lf%lf",&a[i].x,&a[i].y);
        for(int k=1;k<n;k++){
            for(int i=k+1;i<=n;i++){
                dp[k][i]=0;
                if(aabs(a[i].x*a[i].x-a[i].x*a[k].x)<eps)continue;
                double aa,bb;
                aa=(a[i].y-a[k].y*(a[i].x/a[k].x))/(a[i].x*a[i].x-a[i].x*a[k].x);
                bb=(a[k].y-aa*a[k].x*a[k].x)/a[k].x;
                if(aa>=-eps)continue;
                for(int j=1;j<=n;j++)
                if(aabs(aa*a[j].x*a[j].x+bb*a[j].x-a[j].y)<eps){dp[k][i]+=1ll<<(j-1);}
            }
        }int all=(1<<n)-1;
        f[all]=0;
        for(int sta=all-1;sta>=0;sta--){
            int k=0;
            for(int i=1;i<=n;i++)if((sta&(1<<(i-1)))==0){
                k=i;break;
            }
            f[sta]=f[sta|(1<<(k-1))]+1;
            for(int j=k+1;j<=n;j++)if(dp[k][j]>0){
                if(f[sta|dp[k][j]]+1<f[sta])f[sta]=f[sta|dp[k][j]]+1;
            }
        }
        printf("%d\n",f[0]);
    }

}

angrybirds(不是很懂为什么bzoj不放这题)

联赛前一礼拜真的感觉自己快死了,never experienced feelings,mentally and physically,整个人的正气一直没有恢复,当时想的是:

考前这么虚,rp会转移到考试时吗,发现是我想多了。

至于题解和一些过程……

(未完待续)

时间: 2024-12-22 23:39:20

联赛订正的相关文章

名校联赛DAY.2A层第三题book(书)题解

书 时间限制: 1 Sec  内存限制: 512 MB 题目描述 书 book.in/.out Hazel有n本书,编号1为n到 ,叠成一堆.当她每次抽出一本书的时候,上方的书会因重力而下落,这本被取出的书则会被放置在书堆顶. 每次有pi的概率抽取编号为i的书.她每次抽书所消耗的体力与这本书在这堆中是第几本成正比.具体地,抽取堆顶的书所耗费体力值为1 ,抽取第二本耗费体力值为2 ,以此类推. 现在 想知道,在很久很久以后(可以认为几乎是无穷的),她每次抽书所耗费的体力的期望值是多少. 最终的答案

codevs 1044 拦截导弹 1999年NOIP全国联赛提高组

1044 拦截导弹 1999年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 输入描述 Input Description 输入导弹

1143 纪念品分组 2007年NOIP全国联赛普及组

1143 纪念品分组 2007年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数.为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少. 你的任务是写一个程序

3285 转圈游戏 2013年NOIP全国联赛提高组

3285 转圈游戏 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推.游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,……,依此类推

2015 HDU 多校联赛 5317 RGCDQ 筛法求解

2015 HDU 多校联赛 5317 RGCDQ 筛法求解 题目  http://acm.hdu.edu.cn/showproblem.php? pid=5317 本题的数据量非常大,測试样例多.数据量大, 所以必须做预处理.也就是用筛法求出全部的F[x],将全部F[x] 打印出来发现.事实上结果不大,最大的数值是7.所以对于每一个区间询问, 直接暴力求取有多少个 1 2 3 4 5 6 7 就可以,从大到小查找.假设出现2个以上 3-7 的数值,那么最大公约数就是该数字. 假设没有出现两个反复

腾讯课堂目标2017高中数学联赛基础班-2作业题解答-10

课程链接:目标2017高中数学联赛基础班-2(赵胤授课) 1. 设 $a_1, a_2, \cdots, a_n\in\mathbf{R}$, 证明: $$\sqrt[3]{a_1^3 + a_2^3 + \cdots + a_n^3} \le \sqrt{a_1^2 + a_2^2 + \cdots + a_n^2}.$$ 解答: $$\left(\sum a_i^3\right)^2 \le \sum a_i^2 \cdot \sum a_i^4 \le \sum a_i^2 \cdot \

数学奥林匹克问题解答:目标2017初中数学联赛集训队作业题解答-2

课程链接:目标2017初中数学联赛集训队-1(赵胤授课) 1.证明: 不等边三角形之三条外角平分线与对边延长线之交点必共线. 证明: 考虑Menelaus定理, 暨证明$${AF \over FB}\cdot{BD \over DC}\cdot{CE \over EA} = 1.$$由外角平分线定理可知, ${AF \over FB} = {AC \over BC}$, ${BD \over DC} = {AB \over AC}$, ${CE \over EA} = {BC \over AB}

MyMathLib系列(订正两个函数)

在行列式消元中的判断条件有问题,这里给出订正后的代码: 1)MyMathLib.LinearAlgebra.CalcDeterminant方法 /// <summary> /// 化三角法行列式计算, /// </summary> /// <param name="Determinants">N阶行列式</param> /// <returns>计算结果</returns> public static double

关于举办第22届全国青少年信息学奥林匹克联赛浙江赛区颁奖大会暨省队集训、选拔的通知

各市科协.教育局,各有关学校: 第22届全国青少年信息学奥林匹克联赛(NOIP2016)成绩已公布,浙江赛区颁奖大会暨集训队首轮培训.选拔将由温州中学和省青少年科技教育协会承办. 我省将根据中国计算机学会<CCF关于2017NOI省内选拔的若干规定>和<浙江省青少年信息学奥林匹克竞赛实施办法>相关规定选拔.组建浙江省队参加于今年暑假期间举行的第34届全国青少年信息学奥林匹克竞赛(NOI2017),参赛名额由全国主办单位规定.现将集训.选拔.颁奖会有关事宜通知如下: 一.集训.选拔对