<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【補題記錄】 Codeforces Round 797 (Div. 3) F Shifting String(置換環(huán)類型補題記錄)

      Codeforces Round 797 (Div. 3) F Shifting String

      思路:

      根據(jù)這個排列進行替換的操作可以往置換環(huán)考慮,就是對于每一段字串,它的變換都是有規(guī)律的,經(jīng)過一定的操作之后都會回到原點,可以想象轉(zhuǎn)化成圖上問題。

      參考ygg的題解,直接用鏈表模擬這個轉(zhuǎn)化的過程,然后暴力計數(shù),因為要滿足所有點都回到對應原位,所以求所有滿足條件的長度之后求lcm即可

      代碼

      #include<bits/stdc++.h>
      #define int long long
      using namespace std;
      typedef pair<int,int> pii;
      const int N = 200+10,mod = 1e9+7;
      
      int p[N];
      bool v[N];
      vector<int> c;
      void dfs(int x){//找到完整的一個環(huán)并且存在vector c中
      	if(v[x])return;
      	v[x] = 1;
      	c.push_back(x);
      	dfs(p[x]);
      }
      void solve() {
      	int n;
      	string s;
      	cin >> n >> s;
      	s = " " + s;
      	for(int i = 1; i <= n; i ++) cin >> p[i],v[i] = 0;
      	int res = 1;
      	for(int i = 1; i <= n; i ++){
      		if(!v[i]){
      			c.clear();
      			dfs(i);
      			list<char> pres,nows;
      //			for(int j = i; v[j]; v[j] = 1, j = p[j])
      //				pres.push_back(s[j]);
      			for(auto id: c) pres.push_back(s[id]);
      			nows = pres;
      			nows.push_back(nows.front());//把頭結(jié)點移動到尾部,就是模擬這個環(huán)上的點移動的過程
      			nows.pop_front();
      			int t = 1;
      			while(pres != nows){
      				nows.push_back(nows.front());
      				nows.pop_front();
      				t ++;//不斷重復上述操作然后計數(shù)
      			}
      			res = res * t /__gcd(res,t);
      		}
      	}
      	
      	cout << res <<'\n';
      
      }
      
      signed main(){
      	ios::sync_with_stdio(false);
      	cin.tie(0);
      	cout.tie(0);
      	int _t = 1;
      	cin >> _t;
      	while(_t --)
      		solve();
      	
      	return 0;
      }
      

      Educational Codeforces Round 4, E Square Root of Permutation

      參考ygg的題解,補充注釋

      代碼

      #include<bits/stdc++.h>
      //#define int long long
      using namespace std;
      typedef pair<int,int> pii;
      const int N = 1e6+10,mod = 1e9+7;
      
      
      int ans[N],p[N],vis[N],n;
      vector<int> c;
      vector<vector<int>> cyc[N]; //cyc[i]存的是大小為i的每個環(huán) 每個環(huán)用一個vector來存
      void update(vector<int> x){//把環(huán)還原成排列
      	for(int i = 1; i < x.size(); i++){
      		ans[x[i-1]] = x[i];
      	}
      	ans[x.back()] = x[0];
      }
      void dfs(int u){
      	if(vis[u]) return;
      	vis[u] = 1;
      	c.push_back(u);
      	dfs(p[u]);
      }
      
      void solve() {
      	cin >> n;
      	for(int i = 1; i <= n; i ++) ans[i] = i,cin >> p[i];
      	for(int i = 1; i <= n;i ++){
      		if(!vis[i]){
      			c.clear();
      			dfs(i);//把排列拆成各種大小的環(huán)
      			cyc[c.size()].push_back(c);
      		}
      	}
      	for(int sz = 1; sz <= n; sz ++){
      		if(sz%2 == 0 && cyc[sz].size() % 2 == 1){
      			cout << "-1\n";
      			return;
      		}
      	}
      	for(int sz = 1; sz <= n; sz ++){
      		if(sz%2 == 1){
      			for(auto c: cyc[sz]){//遍歷大小為奇數(shù)的環(huán)
      				vector<int> now(c.size());
      				int id = 0;
      				for(auto it: c){
      					now[id % c.size()] = it;
      					id+=2;
      				}
      				update(now);
      			}
      		} else {//遍歷大小為偶數(shù)的環(huán)
      			for(int i = 0; i < cyc[sz].size(); i += 2){
      				vector<int> c1 = cyc[sz][i],c2 = cyc[sz][i+1];//每次c1,c2代表合成一對的環(huán)
      				vector<int> now;//now存合成的環(huán),交替放入now中
      				for(int i = 0; i < c1.size(); i ++){
      					now.push_back(c1[i]);
      					now.push_back(c2[i]);
      				}
      				update(now);
      			}
      		}
      	}
      	
      	for(int i = 1; i <= n ;i ++) cout << ans[i] << " ";
      	cout <<'\n';
      	
      }
      
      signed main(){
      	ios::sync_with_stdio(false);
      	cin.tie(0);
      	cout.tie(0);
      
      	int _t = 1;
      	//cin >> _t;
      	while(_t --)
      		solve();
      	
      	return 0;
      }
      
      

      Codeforces Round 789 (Div. 2) E Tokitsukaze and Two Colorful Tapes

      代碼

      #include<bits/stdc++.h>
      #define int long long
      using namespace std;
      typedef pair<int,int> pii;
      const int N = 1e5+10,mod = 1e9+7;
      
      int a[N],b[N],to[N];
      bool v[N];
      vector<int> c;
      
      void dfs(int x){
      	if(v[x]) return;
      	v[x] = 1;
      	c.push_back(x);
      	dfs(to[x]);
      }
      void solve() {
      	int n;
      	cin >> n;
      	for(int i = 1; i<= n;i ++) v[i] = 0;
      	int mi = 1,mx = n;
      	for(int i = 1; i<= n; i ++) cin >> a[i];
      	for(int i = 1; i <= n; i ++) cin >> b[i],to[a[i]] = b[i];
      	int ans = 0;
      	
      	auto cal=[&](){
      		if(c.size() == 1) return 0ll;
      		vector<int> v;
      		for(int i = 0; i < c.size() - c.size() % 2; i ++){
      			if(i%2 == 0) v.push_back(mx--);
      			else v.push_back(mi ++);
      		}
      		int res = 0;
      //		for(auto i:v){
      //			cout << i <<" ";
      //		}
      //		cout << '\n';
      		for(int i = 1; i < v.size(); i ++) {
      			res += abs(v[i] - v[i - 1]);
      		}
      		res += abs(v.back() - v[0]);
      		return res;
      	};
      	
      	for(int i = 1; i <= n;i ++){
      		if(!v[i]){
      			c.clear();
      			dfs(i);
      			int k = cal();
      			//cout << k << "\n";
      			ans += k;
      		}
      	}
      	
      	cout << ans <<'\n';
      }
      
      signed main(){
      	ios::sync_with_stdio(false);
      	cin.tie(0);
      	cout.tie(0);
      
      	int _t = 1;
      	cin >> _t;
      	while(_t --)
      		solve();
      	
      	return 0;
      }
      
      
      posted @ 2023-07-05 22:42  komushdjk  閱讀(104)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品日日摸夜夜添夜夜添无码| 无码中文字幕热热久久| 国产精品成人一区二区三区| 亚洲激情一区二区三区视频| 日韩一区二区三区理伦片| 亚洲精品av一二三区无码| 日韩高清不卡一区二区三区| 亚洲av日韩av一区久久| 狠狠躁夜夜躁人人爽天天5| 国产无遮挡猛进猛出免费软件| 久久夜色精品国产亚av| 国产精品 自在自线| 人妻激情视频一区二区三区| 国产欧美日韩综合精品二区| 亚洲av本道一区二区| 色噜噜久久综合伊人一本| 夜夜偷天天爽夜夜爱| 国产睡熟迷奷系列网站| 精品国产迷系列在线观看| 国产精品亚洲精品日韩已满十八小 | 精品无码国产日韩制服丝袜| 潮喷无码正在播放| 日韩av一区二区三区不卡| 蜜臀一区二区三区精品免费| 日韩精品亚洲精品第一页| 国产99久久精品一区二区| 国产办公室秘书无码精品99| 一边吃奶一边摸做爽视频| 国产精品美女一区二区三| 国产高清在线精品一区APP| 日本一区二区久久人妻高清 | 日99久9在线 | 免费| 国模少妇无码一区二区三区| 成人AV专区精品无码国产 | 四虎在线成人免费观看| 337p粉嫩大胆噜噜噜| 亚洲an日韩专区在线| 亚洲一区二区三区| 欧美牲交a欧美牲交aⅴ免费| 日韩中文字幕精品人妻| 亚洲国产精品综合久久20|