zoukankan      html  css  js  c++  java
  • 【noip2011】

    noip2011

    铺地毯

    应该从后往前判断该地毯是否覆盖

    struct node{int x,y,n,m;}a[N];
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
    	rd(n);
    	for(int i=1;i<=n;++i) rd(a[i].x),rd(a[i].y),rd(a[i].n),rd(a[i].m);
    	rd(x),rd(y);
    	for(int i=1;i<=n;++i)
    	if((a[i].x<=x&&a[i].y<=y)&&(a[i].x+a[i].n>=x)&&(a[i].y+a[i].m>=y)) ans=i;
    	printf("%d",ans);
    	return 0;
    

    选择客栈

    用一个桶来装该种颜色的客栈有多少个可以配对 每找到一个新的可配对客栈 将其与前面一段的都++

    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
    	rd(n),rd(m),rd(k);
    	for(int i=1;i<=n;++i) rd(a[i]),rd(p[i]);
    	for(int i=1,lst=0;i<=n;++i){
    		if(p[i]<=k){for(int j=lst+1;j<=i;++j) ++cnt[a[j]];lst=i;}
    		ans+=cnt[a[i]],ans-=(p[i]<=k);
    	}
    	printf("%lld",ans);
    	return 0;
    }
    

    Mayan游戏

    神烦搜索==

    写一个删除函数、掉落函数 然后还有一些细节

    注意移动的时候左边有块的话就不用移动了 因为它左移和它左边的块左移是等价的

    struct node{int x,y,d;}ans[10];
    void print(){for(int i=1;i<=n;++i) printf("%d %d %d
    ",ans[i].x-1,ans[i].y-1,ans[i].d);exit(0);}
    
    void count(){for(int i=1;i<=5;++i){mp[i][0]=0;while(mp[i][mp[i][0]+1])mp[i][0]+=1;}}
    void fall(){
        for(int i=1,cnt;i<=5;++i){
            cnt=0;
            for(int j=1;j<=7;++j)
                if(mp[i][j]) mp[i][++cnt]=mp[i][j];
            for(int j=cnt+1;j<=7;++j) mp[i][j]=0;mp[i][0]=cnt;
        }
    }
    bool tg[7][9],ok;
    void delet(){
        count();memset(tg,0,sizeof(tg)),ok=0;
        for(int i=2;i<=4;++i)
            for(int j=1;j<=mp[i][0];++j)
                if(mp[i][j]==mp[i-1][j]&&mp[i][j]==mp[i+1][j]) tg[i][j]=tg[i-1][j]=tg[i+1][j]=1;
        for(int i=1;i<=5;++i)
            for(int j=2;j<mp[i][0];++j)
                if(mp[i][j]==mp[i][j-1]&&mp[i][j]==mp[i][j+1]) tg[i][j]=tg[i][j-1]=tg[i][j+1]=1;
        for(int i=1;i<=5;++i)
            for(int j=1;j<=mp[i][0];++j)
                if(tg[i][j]) mp[i][j]=0,ok=1;
        fall();if(ok) delet();
    }
    
    bool finsh(){for(int i=1;i<=5;++i)if(mp[i][0]) return 0;return 1;}
    void dfs(int x){
        if(x==n+1){if(finsh()) print();return;}
        if(finsh()) return;
    	int ret[10][10];memcpy(ret,mp,sizeof(mp));
        for(int i=1;i<=5;++i)
            for(int j=1;j<=mp[i][0];++j){
                if(i!=5){
                    swap(mp[i][j],mp[i+1][j]);
                    fall(),delet(),ans[++tt]=(node){i,j,1},dfs(x+1);
    				--tt,memcpy(mp,ret,sizeof(mp));
                }
                if(i!=1&&!mp[i-1][j]){
                    swap(mp[i][j],mp[i-1][j]);
                    fall(),delet(),ans[++tt]=(node){i,j,-1},dfs(x+1);
    				--tt,memcpy(mp,ret,sizeof(mp));
                }
            }
    }
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
        rd(n);
        for(int i=1;i<=5;++i)
    		while(rd(mp[i][++mp[i][0]]),mp[i][mp[i][0]]);
        for(int i=1;i<=5;++i) mp[i][0]-=1;
        dfs(1),puts("-1");
        return 0;
    }
    

    计算系数

    根据二项式定理:((a+b)^n=sumlimits_{k=0}^n{nchoose k}a^kb^{n-k})

    复习一下杨辉三角?

    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
    	rd(a),rd(b),rd(k),rd(n),rd(m);
    	for(int i=1;i<=k;++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])%P;
    	}
    	ans=qpow(a%P,n)*qpow(b%P,m)%P;
    	printf("%d",ans*c[k][n]%P);
        return 0;
    }
    

    聪明的质检员

    二分

    struct node{int l,r;}q[N];
    int sum[N];ll sv[N];
    ll check(int mid){
    	for(int i=1;i<=n;++i)
    		if(w[i]>=mid) sum[i]=1,sv[i]=v[i];
    		else sum[i]=sv[i]=0;
    	for(int i=1;i<=n;++i) sum[i]+=sum[i-1],sv[i]+=sv[i-1];
    	ll ret=0;
    	for(int i=1,l,r;i<=m;++i) ret+=((ll)sum[r=q[i].r]-sum[l=q[i].l-1])*(sv[r]-sv[l]);
    	return ret;
    }
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
    	rd(n),rd(m),rd(K);
    	for(int i=1;i<=n;++i) rd(w[i]),rd(v[i]);
    	for(int i=1;i<=m;++i) rd(q[i].l),rd(q[i].r);
    	int l=0,r=1000000,mid;ll ret;
    	while(l<=r){
    		mid=l+r>>1,ret=check(mid),ans=min(ans,abs(ret-K));
    		if(!ans) return puts("0"),0;
    		if(ret>K) l=mid+1;
    		else r=mid-1;
    	}
    	printf("%lld",ans);
        return 0;
    }
    

    观光公交

    每次修改一条路(i) 它只会影响到达景点(i+1)以及它之后的连续的会出现”人等车“的情况的景点 若景点(i+1)之后出现一个景点是(x)"车等人"的情况那么这条路权值减少就会不影响到景点(x)及其之后的景点

    那么每次贪心减去影响最大的那条边

    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
        rd(n),rd(m),rd(k);
        for(int i=1;i<n;++i) rd(d[i]);
        for(int i=1;i<=m;++i){
            rd(t[i]),rd(fr[i]),rd(to[i]);
            las[fr[i]]=Max(las[fr[i]],t[i]),++dw[to[i]];
        }
        for(int i=1;i<=n;++i) sum[i]=sum[i-1]+dw[i];
        for(int i=1,nw=0;i<=n;++i) lef[i]=nw=Max(las[i],nw),nw+=d[i];
        for(int i=1;i<=m;++i) ans+=((ll)lef[to[i]-1]+d[to[i]-1])-t[i];
        while(k--){
            for(int i=1,nw=0;i<=n;++i) lef[i]=nw=Max(las[i],nw),nw+=d[i];
            eff[n-1]=n;//第i条边改变 会影响到的最远城市 
            for(int i=n-2,arr;i;--i){
                arr=lef[i]+d[i];
                if(arr>las[i+1]) eff[i]=eff[i+1];
                else eff[i]=i+1;
            }
            int mx=0,pos=0;
            for(int i=1;i<n;++i)
                if(d[i]&&sum[eff[i]]-sum[i]>mx) mx=sum[eff[i]]-sum[i],pos=i;
            ans-=mx,--d[pos];
        }
        printf("%lld",ans);
        return 0; 
    }
    
  • 相关阅读:
    MVC6 发布IIS
    Spring-Spring Bean后置处理器
    Java中重载和重写
    Java基础
    Python高级教程-多重继承
    Spring Bean声明周期
    Spring Bean作用域
    Spring-ApplicationContext容器
    Spring-BeanFactory容器
    Spring-Spring IoC容器
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11769223.html
Copyright © 2011-2022 走看看