这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
2020-2021:teams:wangzai_milk:20200713比赛记录 [2020/07/15 00:35] infinity37 |
2020-2021:teams:wangzai_milk:20200713比赛记录 [2020/07/16 15:16] (当前版本) wzx27 |
||
---|---|---|---|
行 698: | 行 698: | ||
} | } | ||
</code></hidden> | </code></hidden> | ||
+ | \\ | ||
+ | |||
+ | ==== J - Just Shuffle ==== | ||
+ | |||
+ | 给一个置换 $A$ 和大质数 $k$,求置换 $P$ 使得 $P^k = A$。 | ||
+ | |||
+ | 求出 $A$ 的每个循环节,因为 $k$ 是个大质数,所以 $P$ 每个循环节作 $k$ 次方都不会分裂,于是 $P$ 的循环节和 $A$ 的循环节是一样的,只是向右平移了 $k$ 对循环节长度的逆元个长度。 | ||
+ | |||
+ | <hidden code> <code cpp> | ||
+ | #include<bits/stdc++.h> | ||
+ | #define ALL(x) (x).begin(),(x).end() | ||
+ | #define ll long long | ||
+ | #define ull unsigned long long | ||
+ | #define pii_ pair<int,int> | ||
+ | #define mp_ make_pair | ||
+ | #define pb push_back | ||
+ | #define fi first | ||
+ | #define se second | ||
+ | #define pg PermutationGroup | ||
+ | #define rep(i,a,b) for(int i=(a);i<=(b);i++) | ||
+ | #define per(i,a,b) for(int i=(a);i>=(b);i--) | ||
+ | #define show1(a) cout<<#a<<" = "<<a<<endl | ||
+ | #define show2(a,b) cout<<#a<<" = "<<a<<"; "<<#b<<" = "<<b<<endl | ||
+ | using namespace std; | ||
+ | const ll INF = 1LL<<60; | ||
+ | const int inf = 1<<30; | ||
+ | const int maxn = 1e5+5; | ||
+ | inline void fastio() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);} | ||
+ | inline ll gcd(ll a,ll b) {return b==0?a:gcd(b,a%b);} | ||
+ | inline ll lcm(ll a,ll b) {return a*b/gcd(a,b);} | ||
+ | ll extgcd(ll a,ll b,ll& u,ll& v) | ||
+ | { | ||
+ | ll d; | ||
+ | if(b==0){ | ||
+ | d = a; | ||
+ | u=1,v=0; | ||
+ | }else { | ||
+ | d = extgcd(b,a%b,v,u); | ||
+ | v -= a/b*u; | ||
+ | }return d; | ||
+ | } | ||
+ | int n,k,vis[maxn]; | ||
+ | int P[maxn],ans[maxn],a[maxn],tmp[maxn],ttt[maxn]; | ||
+ | int main() | ||
+ | { | ||
+ | //fastio(); | ||
+ | scanf("%d%d",&n,&k); | ||
+ | rep(i,1,n) scanf("%d",&a[i]); | ||
+ | rep(i,1,n)if(!vis[i]){ | ||
+ | vis[i] = 1; | ||
+ | vector<int> pos; | ||
+ | int u = a[i],len = 1;pos.pb(i); | ||
+ | while(u!=i){ | ||
+ | len++; | ||
+ | vis[u] = 1;pos.pb(u); | ||
+ | u = a[u]; | ||
+ | } | ||
+ | ll x,y; | ||
+ | extgcd(k,len,x,y); | ||
+ | x = (x%len+len)%len; | ||
+ | rep(i,1,len){ | ||
+ | ans[pos[i-1]] = pos[(i-1+x)%len]; | ||
+ | } | ||
+ | } | ||
+ | rep(i,1,n) printf("%d ",ans[i]); | ||
+ | return 0; | ||
+ | } | ||
+ | </code> </hidden> | ||
\\ | \\ | ||
==== K - Keyboard Free ==== | ==== K - Keyboard Free ==== | ||
行 745: | 行 813: | ||
补完了!感觉这场题蛮正常的(m(就是隐约觉得都可做,然而没做对)。这种场的要义是不是不能陷入僵局quq(卡题乃正常场之大忌),好几道没怎么看的题后来发现可能更值得入手?啊下周加油。——Zars19 | 补完了!感觉这场题蛮正常的(m(就是隐约觉得都可做,然而没做对)。这种场的要义是不是不能陷入僵局quq(卡题乃正常场之大忌),好几道没怎么看的题后来发现可能更值得入手?啊下周加油。——Zars19 | ||
+ | |||
+ | C题一开始想错了耽误了一些时间,想到了对的实现还很艰难呜呜呜呜该多写难题代码了。FWT这个有点可惜,感觉要多做一些FWT题了。 ——Infinity37 | ||
+ | |||
+ | 和上一场一样都是一个题卡了几个小时?(以后要试着跳出来。 ——_wzx27 |