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次方
扩展欧拉定理算指数
G 01游戏
看题解发现忘记两行/两列不能重复了/jk
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;
}