CF1551D1 Domino (easy version)
考点:数学+分类讨论。
先考虑竖着的情况。显然每次选择两个相邻的列使得行数减少 1
。最后每一列的行数都必须是偶数。分奇偶讨论即可。
CF1551D2 Domino (hard version)
考点:模拟
根据四色定理可知,方案一定有解。
#include<bits/stdc++.h>
#define ll long long
#define PII pair<int,int>
#define All(a) a.begin(),a.end()
using namespace std;
int cnt[105],n,m,k;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
char ans[105][105];
bool ch[26];
void paint(int x,int y,int x2,int y2) {
memset(ch,0,sizeof(ch));
for(int i=0;i<4;i++) {
int tx=x+dx[i],ty=y+dy[i];
if(ans[tx][ty]) ch[ans[tx][ty]-'a']=1;
}
for(int i=0;i<4;i++) {
int tx=x2+dx[i],ty=y2+dy[i];
if(ans[tx][ty]) ch[ans[tx][ty]-'a']=1;
}
for(int i=0;i<26;i++)
if(!ch[i]) {
ans[x][y]=ans[x2][y2]='a'+i;
return;
}
}
void output() {
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
printf("%c",ans[i][j]);
}
printf("\n");
}
}
int main() {
int T; cin>>T;
while(T--) {
int ok=0; cin>>n>>m>>k; for(int i=1;i<=m;i++) cnt[i]=n;
memset(ans,0,sizeof(ans));
if(n%2==0) {
if(k%2==0&&n*(m/2)>=k) {
printf("YES\n");
for(int i=1;i<n;i+=2) {
for(int j=1;j<m;j+=2) {
if(k) {
paint(i,j,i,j+1);
paint(i+1,j,i+1,j+1);
k-=2;
}
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
if(!ans[i][j]) {
paint(i,j,i+1,j);
}
}
}
output();
}
else {
printf("NO\n");
}
}
else {
if(m%2==0&&k>=m/2&&(k-m/2)%2==0) {
printf("YES\n");
for(int i=1;i<m;i+=2) {
paint(1,i,1,i+1);
k--;
}
for(int i=2;i<n;i+=2) {
for(int j=1;j<m;j+=2) {
if(k) {
paint(i,j,i,j+1);
paint(i+1,j,i+1,j+1);
k-=2;
}
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
if(!ans[i][j]) {
paint(i,j,i+1,j);
}
}
}
output();
}
else {
printf("NO\n");
}
}
}
}
CF1551E Fixed Points
考点:dp状态
。 设 dp[i][j]
表示前 i
个数,i
的排名为 j
的最大匹配数,那么答案显然可以算。
转移方程为:dp[i][j] = max(dp[i-1][j], dp[i-1][j-1] + (j == a[i]))
。
CF1551F Equidistant Vertices
直接 n^3
暴力计算即可。
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」