899C - Dividing the numbers && 1804C - Pull Your Luck

76 阅读2分钟

今天写了两个div2div2CC,分别是:

Problem - 899C - Codeforces

Problem - 1804C - Codeforces

分析(这里姑且用ABAB形容顺序)

AA:一个相对简单的题,但是我好久才想出了正确思路,我们很轻易就可以发现一个性质,就是当nn%4=04=0的时候,我们一定是可以做到两组分配完成后差值为00,依据这个点,我们可以把所有的nn分成以下四类:nn%4==04==0,nn%4==14==1,nn%4==24==2,nn%4==34==3, 第二种我们单拎出一个11,所以差值为11,第三组我们拎出一个11,一个22,所以差值也是11,第四组我们拎出1,2,31,2,3,差值为00,结束。

BB:这是一个纯纯诈骗题,就是很纯粹的思维++数学,cfcf的尿性。我们经过推式子可以发现推出一下式子f(f+1)+2x=2(k+1)nf(f+1)+2x=2(k+1)n,其中kk为非负整数,f[0,p]f∈[0,p]。显然暴力枚举是不可取的,于是我们就要找性质,我们发现在2n2n以后会重复之前的东西,所以我们只需要枚举到min(2n,p)min(2n,p)即可,还要注意不仅仅要modmod 2n==02n==0,由于系数是(k+1)(k+1),故商还要>0>0才行。

代码

AA:

#include <bits/stdc++.h>

#define ll long long
#define x first
#define y second

#define IOS ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);
using namespace std;
int n;
vector<int> v;
void solve(){
	cin>>n;v.clear();
	if(n==2){
		cout<<1<<endl<<1<<" "<<1<<endl;
	}
	else if(n==3){
		cout<<0<<endl<<1<<" "<<3<<endl;
	}
	else if(n==4){
		cout<<0<<endl<<2<<" "<<1<<" "<<4<<endl;
	} 
	else{
		if(n%4==0){
			cout<<0<<endl;
			cout<<n/2<<" ";
			for(int i=n/4+1;i<=n/4+n/2;i++){
				cout<<i<<" "; 
			}
		}
		else if(n%4==1){
			n--;
			cout<<1<<endl;
			cout<<n/2<<" ";
			for(int i=n/4+1;i<=n/4+n/2;i++){
				cout<<i+1<<" "; 
			}
		}
		else if(n%4==2){
			n-=2;
			cout<<1<<endl;
			cout<<n/2+1<<" ";
			cout<<1<<" ";
			for(int i=n/4+1;i<=n/4+n/2;i++){
				cout<<i+2<<" "; 
			}
		}
		else{
			n-=3;
			cout<<0<<endl;
			cout<<n/2+1<<" ";
			cout<<3<<" ";
			for(int i=n/4+1;i<=n/4+n/2;i++){
				cout<<i+3<<" "; 
			}
		}
	}
}
int main(){
	
	int t;
	t=1;
	while(t--) solve();
	return 0;
} 

BB:

#include <bits/stdc++.h>

#define ll long long
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);
using namespace std;
int t;
void solve(){
	int n,x;
	ll f;
	cin>>n>>x>>f;
	for(ll i=0;i<=min(2ll*n,f);i++){
		ll ans=i*(i+1ll)+2ll*x;
		if(ans%(2ll*n)==0 && ans/(2ll*n)>=1){
			cout<<"Yes\n";
			return;
		}
	}
	cout<<"No\n";
}
int main(){
	IOS
	cin>>t;
	while(t--) solve();
	return 0; 
}

完结散花!