网站建设小组五类成员,邯郸网站设计怎么注册,wordpress图片加载非常久,wordpress需要访问您网页服务器的权限刚开始一直把题意看错了。。。体测完智商急剧下降
正确理解题意以后自己写一直wa#xff0c;而且并不知道是哪里的问题#xff0c;在网上看了一下其他人写的改了改自己的就过了#xff0c;可是之前的还是不知道为什么不对。
题意大概就是有一个置换群#xff0c;问运算多…刚开始一直把题意看错了。。。体测完智商急剧下降
正确理解题意以后自己写一直wa而且并不知道是哪里的问题在网上看了一下其他人写的改了改自己的就过了可是之前的还是不知道为什么不对。
题意大概就是有一个置换群问运算多少次会出现给定的样子。我们可以求出每个元素需要运算多少次到达给定的样子记为r[i]r[i]r[i],再计算出运算多少次是一个循环记为m[i]m[i]m[i]则最后的次数x为x%mr的同余方程的解。
AC代码
#includecstdio
#includecstring
#includecstdlib
#includealgorithm
#includeiostream
#includecmath
#includectime
#includeclimits
#includequeue
#includevector
#includeset
#includemap
using namespace std;typedef long long ll;
const ll INF0x3f3f3f3f;
const ll MAXN1e35;ll a[MAXN],b[MAXN],m[MAXN],r[MAXN],vis[MAXN],tmp[MAXN],nxt[MAXN];
ll n,ans;void ex_gcd(ll a,ll b,ll d,ll x,ll y)
{if(!b) {da; x1; y0;}else{ex_gcd(b,a%b,d,y,x); y-(a/b)*x;}
}bool ex_crt(ll M,ll R)
{M1; R0; ll d,k,kk,c;for(ll i1;in;i){if(m[i]0 r[i]0) continue;cr[i]-R;ex_gcd(M,m[i],d,k,kk);if(c%d) return false;kc/d*k%(m[i]/d); Rk*M; M*m[i]/d; R%M;}R(RM)%M;return true;
}void test()
{printf(\n);printf(m: ); for(ll i1;in;i)printf(%d ,m[i]); printf(\n);printf(r: ); for(ll i1;in;i)printf(%d ,r[i]); printf(\n);printf(\n);
}bool solve()
{ll t,cnt;memset(m,0,sizeof(m));memset(r,-1,sizeof(r));/*for(ll i1;in;i){cnt0; ti;if(a[i]i){if(b[i]!i) return false;m[i]0; r[i]0; continue;}while(a[t]!i){if(r[i]-1 tb[i]) r[i]cnt;ta[t]; cnt;}m[i]cnt1; if(r[i]-1) return false;}*/memset(vis,false,sizeof(vis));for(int i1;in;i) tmp[i]i;cnt0;while(cnt!n){for(int i1;in;i){nxt[i]tmp[a[i]]; if(vis[i]) continue;m[i];if(nxt[i]i){cnt; vis[i]true;}if(nxt[i]b[i]) r[i]m[i];}for(int i1;in;i) tmp[i]nxt[i];}for(int i1;in;i){if(r[i]0) return false; r[i]%m[i];}//test();ll M,R;if(ex_crt(M,R))ansR;else return false;return true;
}int main()
{while(~scanf(%lld,n) n){bool flagtrue;for(ll i1;in;i) scanf(%lld,a[i]);for(ll i1;in;i) {scanf(%lld,b[i]);if(flag b[i]!flag) flagfalse;}if(flag){printf(0\n);continue;}if(solve()){printf(%lld\n,ans);}else{printf(-1\n);}}return 0;
}我自己写的代码是求m和r的部分有问题并不知道为什么。。。难受