zoukankan      html  css  js  c++  java
  • P3207 [HNOI2010]物品调度

    传送门

    完了题目看错了……还以为所有的(x,y)都要一样……结果题解都没看懂……
    先考虑如果已经求出了所有的(pos)要怎么办,那么我们可以把(0)也看做是一个箱子,然后最后每个箱子都在一个环里。如果是自环无视,如果(0)在这个环里就用(0)做每次的中介把所有都换到正确的位置上,总共要(L-1)次,否则的话把(0)换进环里然后换完之后再换出去,总共要换(L+1)
    我们发现随着(x)的增大,(pos)肯定是形成一个环的……随意就枚举(y)的值,然后看看这个环上还有没有空位可以放,有的话就放进去。总之就是用并查集维护,每次放完之后指向下一个能放的位置,即(x+D)

    //minamoto
    #include<bits/stdc++.h>
    #define R register int
    #define fp(i,a,b) for(R i=a,I=b+1;i<I;++i)
    #define fd(i,a,b) for(R i=a,I=b-1;i>I;--i)
    using namespace std;
    char buf[1<<21],*p1=buf,*p2=buf;
    inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
    int read(){
        R res,f=1;char ch;
        while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
        for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
        return res*f;
    }
    const int N=1e5+5;
    int n,S,Q,P,M,D,x,y,ans,cnt,tot,fa[N],C[N],pos[N];bool vis[N];
    int find(R x){return fa[x]==x?x:fa[x]=find(fa[x]);}
    void merge(R x,R y){fa[find(x)]=find(y);}
    void solve(){
    	n=read(),S=read(),Q=read(),P=read(),M=read(),D=read();
    	fp(i,1,n-1)C[i]=(1ll*C[i-1]*Q+P)%M;fp(i,0,n-1)fa[i]=i;
    	memset(vis,0,sizeof(vis)),pos[0]=S,vis[S]=true,merge(S,(S+D)%n);
    	fp(i,1,n-1){
    		x=find(C[i]%n),y=0;
    		while(vis[x])++y,x=find((C[i]+y)%n);
    		pos[i]=x,vis[x]=1,merge(x,(x+D)%n);
    	}
    	memset(vis,0,sizeof(vis)),ans=cnt=0;
    	fp(i,0,n-1)if(!vis[i]){
    		tot=0,x=i;
    		while(!vis[x])++tot,vis[x]=true,x=pos[x];
    		if(tot>1)ans+=tot,++cnt;
    	}ans+=pos[0]?cnt-2:cnt;printf("%d
    ",ans);
    }
    int main(){
    //	freopen("testdata.in","r",stdin);
    	int T=read();
    	while(T--)solve();
    	return 0;
    }
    
  • 相关阅读:
    高斯消元学习
    HDU 4596 Yet another end of the world(解一阶不定方程)
    Codeforces Round #318 div2
    HDU 4463 Outlets(一条边固定的最小生成树)
    HDU 4458 Shoot the Airplane(计算几何 判断点是否在n边形内)
    HDU 4112 Break the Chocolate(简单的数学推导)
    HDU 4111 Alice and Bob (博弈)
    POJ 2481 Cows(线段树单点更新)
    HDU 4288 Coder(STL水过)
    zoj 2563 Long Dominoes
  • 原文地址:https://www.cnblogs.com/bztMinamoto/p/10055300.html
Copyright © 2011-2022 走看看