首页 > 其他分享 >[Codeforces] CF1858C Yet Another Permutation Problem

[Codeforces] CF1858C Yet Another Permutation Problem

时间:2023-11-24 20:45:54浏览次数:40  
标签:Alex CF1858C int Codeforces 整数 Another Permutation Problem Yet

Yet Another Permutation Problem - 洛谷

这题本来很简单,思路我也想到了,但是代码一直没写对,思路也一直换来换去(悲

然而发现最开始的思路是对的

题意

Alex 收到了一个名为 "GCD 排列" 的游戏作为生日礼物。这个游戏的每一轮进行如下操作:

  • 首先,Alex 选择一个整数序列\(a_1,a_2,…,a_n\) ,其中整数范围从 \(1\) 到 \(n\) 。
  • 然后,对于每个 i 从 1 到 n ,计算整数 \(d_i=gcd(a_i,a(i\mod n)+1)\) 。
  • 本轮的得分是 \(d_1,d_2,…,d_n\) 中不同数字的数量。

Alex 已经玩了几轮游戏,所以他决定找一个整数序列 \(a_1,a_2,…,a_n\) ,使得它的得分尽可能地大。

回顾一下,\(gcd(x,y)\) 表示 \(x\) 和 \(y\) 的 最大公约数(GCD),而 \(x\space mod\space y\) 表示将 \(x\) 除以 \(y\) 的余数。

长度为 \(n\) 的排列是一个由 \(n\) 个不同整数组成的数组,整数范围从 \(1\) 到 \(n\) 且顺序任意。例如,\([2,3,1,5,4]\) 是一个排列,但 \([1,2,2]\) 不是排列(数组中有重复的 \(2\)),\([1,3,4]\) 也不是排列(虽然 \(n=3\),但数组中有 \(4\))。

思路

可以发现,如果想让\(d\)里面有尽量多的不重复数字,就要让\(a\)中的每个数字都被利用。即,尽量使\(a_i=2\times a_{i-1}\)

另:不要过于参考样例,没啥用

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,cnt,f[maxn];
int run()
{
	cin>>n;
	for(int i=0;i<=n;i++) f[i]=0;
	for(int i=1;i<=n;i++)
	{
		int cnt=i;
		if(f[i]==0)
		{
			while(cnt<=n)
			{
				cout<<cnt<<" ";
				f[cnt]=1;
				cnt*=2;
			}
		}
	}
	cout<<endl;
	return 0;
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		run();
	}
	return 0;
}

标签:Alex,CF1858C,int,Codeforces,整数,Another,Permutation,Problem,Yet
From: https://www.cnblogs.com/lyk2010/p/17854717.html

相关文章

  • Codeforces Round 905 (Div. 3)
    CodeforcesRound905(Div.3)A.Morning题意:操作:显示,向前走都为一次操作;目标:显示这四个数思路:0->10,然后依次作差就行#include<bits/stdc++.h>usingnamespacestd;voidsolve(){chara[4];intmi=100,sum=4,b[4];for(inti=0;i<4;i++){cin>>a[i]......
  • Codeforces Round 903 (Div. 3)
    CodeforcesRound903(Div.3)A.Don'tTrytoCount大概题意给你两个字符串a,b。a串可进行的操作为将整个a串复制到之前的a串后面(直接用a+a即可),然后看操作多少次可以让b串变为a串的子串如果不能就输出-1。#include<iostream>usingnamespacestd;stringa,b;voidsolve()......
  • Codeforces Round 910 (Div. 2)
    CodeforcesRound910(Div.2)A.MilicaandString解题思路:统计给定字符串\(s\)中的\(B\)的数量,记录为\(cnt\)。如果\(cnt==k\):输出0;如果\(cnt<k\):从左往右数,将第\(cnt-k\)个\(A\)的位置前的数全部变成\(B\).如果\(cnt>k\):从左往右数,将第\(k-cnt\)个\(B\)的......
  • CodeForces 1898F Vova Escapes the Matrix
    洛谷传送门CF传送门Type\(1\)是简单的。直接输出空格个数即可。Type\(2\)也是简单的。显然要堵住不在起点和出口最短路上的格子,答案为空格个数减去起点到任一出口的最短路。考虑Type\(3\)。容易发现答案为空格个数减去起点到任两个出口的最短路(公共部分只算一次)。考虑......
  • Codeforces Round 697 (Div. 3)
    A.OddDivisor#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128#definedoublelongdoubletypedefpair<int,int>PII;typedefpair<string,int>PSI;typedefpair<string,string>PSS;constintN=......
  • CF1858C Yet Another Permutation Problem
    CF1858CYetAnotherPermutationProblemYetAnotherPermutationProblem-洛谷这题本来很简单,思路我也想到了,但是代码一直没写对,思路也一直换来换去(悲然而发现最开始的思路是对的题意Alex收到了一个名为"GCD排列"的游戏作为生日礼物。这个游戏的每一轮进行如下操作:......
  • [Codeforces] CF1475C Ball in Berland 题解
    BallinBerland-洛谷题意在毕业典礼上,有​个男孩和​个女孩准备跳舞,不是所有的男孩和女孩都准备结伴跳舞。现在你知道​个可能的舞伴,你需要选择其中的两对,以便使没有人重复地出现在舞伴里,求可能的数量。思路暴力最朴素,也是简单的方法,就是通过暴力组合进行配对。#include......
  • Codeforces Round 905 (Div. 2)
    \(A.Chemistry\)https://codeforces.com/contest/1888/submission/233505834\(B.Raspberries\)https://codeforces.com/contest/1888/submission/233506474\(C.YouAreSoBeautiful\)题意:给定一个长\(n\)的序列\(a\)。对于区间\([l,r]\),如果\(a\)没有其它子序列(......
  • Codeforces Round 910 E
    tilian我们发现可以通过交换相邻两个的方式让字典序小的任意移动我们目标串t要是t[0]为c我们肯定是找到第一个合法的c的位置每次去找合法并且最优的那么哪些是不合法的呢比如我比c小的a,b位置还在第一个c前肯定就不能用了我们用26个set维护这个过程即可voidsolve()......
  • Codeforces Round 909 (Div. 3)
    CodeforcesRound909(Div.3)A.GamewithIntegers题意:给定一个数\(x\),\(A,B\)两人轮流进行操作,\(A\)先操作。每次给\(x\)加一或者减一,操作完后\(x\%3==0\)者获胜。判断获胜者。解题思路:判断\(A\)操作完是否能获胜,如果不能,那么一定是\(B\)获胜。代码:#include<bit......