【Codeforces Round #716 (Div. 2) 】Codeforces-1514

10556 단어 codeforcesacm 경기
A. Perfectly Imperfect Array
여러 개의 완전 제곱수의 곱셈도 완전 제곱수다.비공자 서열의 곱셈이 완전 제곱이 아니라는 것을 찾으려면, 원 서열에 비완전 제곱수만 존재하면 된다.
void solves(){
     
	int n,po;cin>>n;
	int flag=0;
	while(n--){
     
		cin>>po;
		int i=(int)sqrt(po);
		if(i*i!=po) flag=1;
	}
	cout<<(!flag ? "NO":"YES")<<endl;
}

B. AND 0, Sum Big
1. 수조에서 원소는 2k-3.12^k-12k-3보다 크지 않다. 즉, 모든 원소는 2진법에서 최대 k자리이다.2. 모든 원소를 비트&연산 0으로 만족시켜야 한다. 즉, 수조에서 모든 원소가 2진법으로 대치된 후에 각 비트는 적어도 0이 있어야 한다.약간 추상적일 수 있다. 예를 들어 n=3,k=5에서 [원소와 최대한]이라는 조건을 고려하지 않을 때 비트&=0의 수조를 만족시킬 수 있다. a[0]=0 1 0 1(2){(2)} (2)​ a[1]=1 0 0 1 0 ( 2 ) _{(2)} (2)​ a[2]=0 1 1 0 1 ( 2 ) _{(2)} (2) 바이너리로 바뀐 후 열마다 최소한 0 3.수조 원소를 충족시키고 최대한 크려면 열마다 1을 최대한 많이 만족시켜야 한다.열마다 0이 존재할 때만 문제의 뜻을 충족시킬 수 있다.이때 수조원소는 (2k-3) ∗(n-3)(2^k-1)*(n-1)(2k-3) ∗(n-1)이다.예: n=3, k=5시: a[0]=1 1 0 1(2){(2)} (2)​ a[1]=1 0 0 1 0 ( 2 ) _{(2)} (2)​ a[2]=0 1 1 1 1 ( 2 ) _{(2)} (2)​ 4.제목이 제시한 조건을 분석한 후에 우리는 0이 매 열에 n가지의 방치 상황이 있고 모두 k열이 있다는 것을 알았다.즉 nk n^k nk입니다.n의 범위가 1e5에 이르렀기 때문에 빠르게 물을 을 수 있다.
ll qpow(ll b,ll p){
     
	ll r=1;
	while(p){
     
		if(p&1) r=(r*b)%mod;
		b=(b*b)%mod;
		p/=2;
	}
	return r%mod;
}
void solves(){
     
	int n,k;cin>>n>>k;
	cout<<qpow(n,k)<<endl;
}

C. Product 1 Modulo N
일단 우리는 a n an은 수열[1,2,...n-1]이다.A=∏i = 1 k a k i A=\prod{i=1}^ka_{k i} A= ∏i=1k aki 여기서 k는 가장 긴 서열의 길이, k i ki ki는 원래 서열에 표시됩니다.A%n=1을 충족시키려면 다음과 같은 두 가지 상황으로 나뉘어 토론한다.A 2.A>n일 때 전전상제법으로 A와 n의 최대 공약수는 1이다. 즉, A와 n의 상호질, 즉 A와 n은 같은 질인자가 없다.A = ∏ i = 1 k a k i A=\prod{i=1}^ka_{k i} A= ∏i=1k aki, 따라서 n과 a k i a{k i} aki 호환성.이때 우리는 다시 a n an an에서 n과 호환되는 모든 요소의 누승은 B = ∏ i = 1 q a q i B=\prod 로 기록됩니다.{i=1}^qa_{q i} B= ∏i=1q aqi, 여기서 qi qiqi는 n과 호환되는 ai a아래 첨자나머지 C=B%n을 다시 기억하십시오.gcd(B,n)=gcd(B%n,n), 그리고 gcd(B,n)=1로 나머지 C와 n의 상호질, 즉 C가 B인 인자를 얻을 수 있다.이때 B/C=A가 필요합니다.
void solves(){
     
	int n,k;cin>>n;
	vector<int>ans;
	ll sum=1;
	for(int i=1;i<n;++i){
     
		if(__gcd(i,n)==1){
     
			ans.push_back(i);
			sum=(sum*i)%n;
		}
	}
	if(sum==1){
     
		cout<<ans.size()<<endl;
		for(auto& it:ans) cout<<it<<" ";cout<<endl;
	} else{
     
		cout<<(int)ans.size()-1<<endl;
		for(auto& it:ans){
     
			if(it!=sum) cout<<it<<" ";
		}cout<<endl;
	}
}

좋은 웹페이지 즐겨찾기