2023 蓝桥杯国赛

vp 了 3h。A WA(想错了,也没手玩),B 不会(应该是欧拉定理,忘了),H 40%(背不过板子)。其他过了

H \(O(n^2\log n)\) 本地 1s+,I 本地 3.4s/jk,最后都没挂。想了下这么典的问题应该没有更优做法,相信评测机

大部分题都随手测了一下,只拍了 E(二分)I(点分治),F H(正解)I 也值得拍。今天状态不错,几乎没挂分,也没怎么调,不过确实本身就又短又好写


A 圆上的连线

枚举连线的数量 \(i\)(可能是 \(0\)),选 \(2i\) 个点的方案数 \({n\choose2i}\)\(2i\) 个点连不相交线段的方案数 \(Catlan(i)\)

\(2023\) 不是质数,\(O(n^2)\) 递推实现

B 2023次方

sol

G 01游戏

看题解发现忘记两行/两列不能重复了/kk

code
#include <bits/stdc++.h>
using namespace std;
#define For(i,x,y,...) for(int i=x,##__VA_ARGS__;i<=(y);++i)
#define rFor(i,x,y,...) for(int i=x,##__VA_ARGS__;i>=(y);--i)
#define Rep(i,x,y,...) for(int i=x,##__VA_ARGS__;i<(y);++i)
#define pb emplace_back
#define sz(a) int((a).size())
#define all(a) (a).begin(),(a).end()
#define fi first
#define se second
#define mkp make_pair
typedef long long LL; typedef vector<int> Vi; typedef pair<int,int> Pii;
auto ckmax=[](auto &x,auto y) { return x<y ? x=y,true : false; };
auto ckmin=[](auto &x,auto y) { return x>y ? x=y,true : false; };
mt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
int rnd(int l,int r) { return uniform_int_distribution<>(l,r)(mt); }
template<typename T=int>T read() { T x; cin>>x; return x; }

const int N = 15;
int n,a[N][N];

void dfs(int x,int y) {
	if( y > n ) return dfs(x+1,1);
	if( x > n ) {
		For(i,1,n) { For(j,1,n) cout<<a[i][j]; cout<<'\n'; }
		exit(0);
	}
	auto slv=[&](int val) {
		a[x][y] = val;
		if( x > 2 && a[x-1][y] == val && a[x-2][y] == val ) return;
		if( y > 2 && a[x][y-1] == val && a[x][y-2] == val ) return;
		int cnt[4] = {0,0,0,0};
		For(i,1,n) {
			if( !a[x][i] && ++cnt[0] > n/2 ) return;
			if( a[x][i] == 1 && ++cnt[1] > n/2 ) return;
			if( !a[i][y] && ++cnt[2] > n/2 ) return;
			if( a[i][y] == 1 && ++cnt[3] > n/2 ) return;
		}
		dfs(x,y+1);
	};
	if( ~a[x][y] ) slv(a[x][y]);
	else slv(0), slv(1), a[x][y] = -1;
}

signed main() {
#ifdef FT
	freopen("g.in","r",stdin);
#endif
	ios::sync_with_stdio(0);cin.tie(0);
	cin>>n; For(i,1,n) For(j,1,n) { char x; cin>>x; a[i][j] = x=='_'?-1:x-'0'; }
	for(bool flg = 1; flg; flg = 0) {
		Rep(i,1,n) Rep(j,1,n) if( ~a[i][j] ) {
			if( a[i][j] == a[i+1][j] )
				flg |= ~a[i-1][j] || ~a[i+2][j], a[i-1][j] = a[i+2][j] = !a[i][j];
			if( a[i][j] == a[i][j+1] )
				flg |= ~a[i][j-1] || ~a[i][j+2], a[i][j-1] = a[i][j+2] = !a[i][j];
		}
	}
	dfs(1,1);
	return 0;
}
posted @ 2024-05-30 23:12  ft61  阅读(21)  评论(0编辑  收藏  举报