【CodeForces训练记录】Codeforces Global Round 27

训练情况

赛后反思

guessforces?结论全靠猜?逆天C题构造+大力分类讨论,这谁想得到啊?

A题

我们看 \((r,c)\) 所在的行,其右边的球左移,对答案的贡献为 \(m-c\),接下来再看下面的 \(n-r\) 行的最左边的球,每个球移动到右上角对答案的贡献为 \(m\),接下来就是剩下的球往左移动,每一行对答案的贡献为 \(m-1\),最后累加即可。

#include <bits/stdc++.h>
#define int long long

using namespace std;

void solve(){
	int n,m,r,c; cin>>n>>m>>r>>c;
	int ans = 0;
	ans += m-c;
	ans += (n-r)*(m);
	ans += (n-r)*(m-1);
	cout<<ans<<endl;
}

signed main(){
	int T; cin>>T; while(T--)
	solve();
	return 0;
}

B题

规律题,我们打表 \(n \le 9\) 我们发现奇数情况就是 \(n-4\)\(3\) 再加上 \(6366\),偶数情况就是 \(n-2\)\(3\) 再加上 \(66\)

#include <bits/stdc++.h>
#define int long long

using namespace std;

void solve(){
	int x; cin>>x;
	if(x==1||x==3){
		cout<<-1<<endl;
		return;
	}
	if(x&1){
		for(int i = 1;i<=x-4;i++) cout<<3;
		cout<<6366<<endl;
	} else {
		for(int i = 1;i<=x-2;i++) cout<<3;
		cout<<66<<endl;
	}
}

signed main(){
	int T; cin>>T; while(T--)
	solve();
	return 0;
}

C题

构造+逆天分类讨论,我们还是打表,我们发现奇数情况的构造可以为 \([2,1,3,4,5,6,7,8,9,\cdots]\) 这种,部分偶数情况也是这种,通过更大的数据打表我们发现 \(2\) 的幂都可以这样构造。

所以我们就剩下偶数情况下不是 \(2\) 的幂的构造,我们还是打表观察发现只需要把 \(\le n\) 最大的 \(2^i\) 放在最后面即可。

#include <bits/stdc++.h>
#define int long long

using namespace std;

void solve(){
	int n; cin>>n;
	vector<int> a(n + 1);
	if(n&1)	{
		a[1] = 2;
		a[2] = 1;
		for(int i = 3;i<=n;i++) a[i] = i;
	} else {
		int x = n;
		while(x%2==0) x/=2;
		if(x!=1){
			int xx = n;
			int len = 0;
			while(xx) xx/=2,len++;
			len--;
			int tot = 0;
			int base = pow(2,len)-1;
			for(int i = 1;i<=n-1;i++){
				++tot;
				if(tot==base) ++tot;
				a[i] = tot;
			}
			a[n] = base;
		} else {
			a[1] = 2;
			a[2] = 1;
			for(int i = 3;i<=n;i++) a[i] = i;
		}
	}
	int cur = 0;
	for(int i = 1;i<=n;i++){
		if(i&1) cur=cur&a[i];
		else cur=cur|a[i];
	}
	cout<<cur<<endl;
	for(int i = 1;i<=n;i++) cout<<a[i]<<" ";
	cout<<endl;
}

signed main(){
	int T; cin>>T; while(T--)
	solve();
	return 0;
}
posted @ 2024-10-28 01:35  MNNUACM_2024ZY  阅读(161)  评论(0编辑  收藏  举报