【CodeForces訓練記錄】Codeforces Global Round 27

MNNUACM_2024ZY發表於2024-10-28

訓練情況

賽後反思

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;
}

相關文章