解析

本题的关键是暴力与构造结合的思想
本题一排排往上填的想法不难得出,但是在列数较小的时候就会GG
所以考虑在n>=5,m<5时,交换n,m,显然问题还是等价的
如果nm均小于5,就直接暴力dfs解决
在最后的边界需要打亿个小表
还有一个特殊情况需要特判
3100岂是浪得虚名

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+100;
const int mod=1e9+7;
#define ll long long
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();};while(isdigit(c)){x=x*10+c-'0';c=getchar();};return x*f;
}
int n,m,k;
vector<int>s[N];
int a[16][16],flag;
void dfs(int x,int y){if(y>m){dfs(x+1,1);return;}if(x>n){int num(0);for(int i=1;i<n;i++){for(int j=1;j<m;j++){int cnt=a[i][j]+a[i+1][j]+a[i][j+1]+a[i+1][j+1];if(cnt==3) num++;if(cnt==4) num+=4;}}if(num==k){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) putchar(a[i][j]||(k==0&&i==1&&j==1)?'*':'.');putchar('\n');}flag=1;}return;}a[x][y]=0;dfs(x,y+1);if(flag) return;a[x][y]=1;dfs(x,y+1);a[x][y]=0;
}
void bf(){dfs(1,1);if(!flag) printf("-1\n");putchar('\n');return;
}
void work1(){int x=m-5;//printf("k=%d\n",k);if(m==5){if(k==0){flag=1;return;}if(k==1){s[n][1]=1;flag=1;return;}if(k==2){s[n][1]=s[n][5]=1;flag=1;return;}if(k==3){s[n][1]=s[n][3]=1;flag=1;return;}if(k==4){s[n][2]=s[n][4]=1;flag=1;return;}if(k==5){s[n][1]=s[n][2]=1;flag=1;return;}if(k==6){s[n][1]=s[n][2]=s[n][5]=1;flag=1;return;}if(k==7){s[n][1]=s[n][2]=s[n][4]=1;flag=1;return;}if(k==8){flag=0;return;}if(k==9){s[n][1]=s[n][2]=s[n][3]=1;flag=1;return;}if(k==10){s[n][1]=s[n][2]=s[n][4]=s[n][5]=1;flag=1;return;}if(k==11){flag=0;return;}if(k==12){flag=0;return;}if(k==13){s[n][1]=s[n][2]=s[n][3]=s[n][4]=1;flag=1;return;}if(k==14){flag=0;return;}if(k==15){flag=0;return;}if(k==16){s[n][1]=s[n][3]=s[n][4]=s[n][5]=s[n][2]=1;flag=1;return;}flag=0;return;}else{if(k==0){flag=1;return;}if(k==1){s[n][m]=1;flag=1;return;}if(k==2){s[n][x+2]=1;flag=1;return;}if(k==3){s[n][x+2]=s[n][m]=1;flag=1;return;}if(k==4){s[n][x+2]=s[n][x+4]=1;flag=1;return;}if(k==5){s[n][x+1]=s[n][m]=1;flag=1;return;}if(k==6){s[n][x+1]=s[n][x+4]=1;flag=1;return;}if(k==7){s[n][x+2]=s[n][x+4]=s[n][x+5]=1;flag=1;return;}if(k==8){s[n][x+1]=s[n][x+2]=1;flag=1;return;}if(k==9){s[n][x+1]=s[n][x+2]=s[n][m]=1;flag=1;return;}if(k==10){s[n][x+1]=s[n][x+2]=s[n][x+4]=1;flag=1;return;}if(k==11){flag=0;return;}if(k==12){s[n][x+1]=s[n][x+2]=s[n][x+3]=1;flag=1;return;}if(k==13){s[n][x+1]=s[n][x+2]=s[n][x+4]=s[n][x+5]=1;flag=1;return;}if(k==14){flag=0;return;}if(k==15){flag=0;return;}if(k==16){s[n][x+1]=s[n][x+2]=s[n][x+3]=s[n][x+4]=1;flag=1;return;}if(k==19){s[n][x+1]=s[n][x+2]=s[n][x+3]=s[n][x+4]=s[n][x+5]=1;flag=1;return;}flag=0;return;}
}
void work2(int x,int y){flag=1;if(k==0) return;y--;//printf("k=%d\n",k);if(k==1){if(y<=m-2) s[x][m]=1;else s[x+1][1]=1;return;}if(k==2){if(y<=m-3) s[x][m-1]=1;else s[x+1][2]=1;return;}if(k==3){if(y<=m-4){s[x][y+2]=1;s[x][m]=1;}else if(y>=m-1){s[x+1][1]=s[x+1][3]=1;}else if(y<=1){s[x][3]=s[x][m]=1;}else if(y==m-2){s[x+1][2]=1;s[x][m]=1;}else{s[x+1][1]=1;s[x][m-1]=1;}return;}
}
int main(){#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);#endifint T=read();int tim(0),f(0);while(T--){flag=0;n=read();m=read();k=read();++tim;//if(tim==1) f=n==12&&m==12&&k==400;//assert(n<5&&m<5);//++tim;//if(oo==100&&tim>=60) //if(f&&tim>=46) printf("%d %d %d\n",n,m,k);//if(f) continue;//if(oo==100) continue;if(n<5&&m<5){bf();continue;}bool jd(0);if(n>m) swap(n,m),jd=1;if(n==3&&k==8*(m-1)-8){if(!jd){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) putchar(j==m?'.':'*');putchar('\n');}}else{for(int j=1;j<=m;j++){for(int i=1;i<=n;i++) putchar(j==1?'.':'*');putchar('\n');}}putchar('\n');continue;}for(int i=1;i<=n;i++){s[i].clear();s[i].shrink_to_fit();s[i].resize(m+10);for(int j=1;j<=m;j++) s[i][j]=i==1;}for(int i=2;i<=n;i++){int o=0;for(int j=1;j<=m;j++){//printf("(%d %d) k=%d\n",i,j,k);if(i==n&&m-j+1<=5){o=1;work1();break;}if(k<4){o=1;work2(i,j);break;}s[i][j]=1;if(j==1) k-=1;else if(j==m) k-=3;else k-=4;}if(o) break;}if(!flag){printf("-1\n");putchar('\n');continue;}if(!jd){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) putchar(s[i][j]?'*':'.');putchar('\n');}}else{for(int j=1;j<=m;j++){for(int i=1;i<=n;i++) putchar(s[i][j]?'*':'.');putchar('\n');}}putchar('\n');}return 0;
}
/*
*/

CF720C Homework(构造)(暴力)相关推荐

  1. 搜索 —— 暴力搜索

    [暴力搜索] 暴力搜索,就是将所有情况都举出,并判断其是否符合题目条件.其基本方法是分析题意后,找到一个合适的维度列举每一个元素,以完成题目. 一般主流的 OJ 中,1000ms 的时间限制下可以运行 ...

  2. Java基础 (适合新手入门保姆级)

    基础1 1.进制的转换 1. 十进制数据转成二进制数据:使用除以2获取余数的方式 2. 二进制(0B/b开头)转换为十进制:1001 = 1*2^0+0*2^1+0*2^2 +1*2^3 = 9 3. ...

  3. WEB安全基础入门—身份验证漏洞

    欢迎关注订阅专栏! WEB安全系列包括如下三个专栏:! <WEB安全基础-服务器端漏洞> <WEB安全基础-客户端漏洞> <WEB安全高级-综合利用> 知识点全面细 ...

  4. day26【反射_注解】课上

    零.类的加载时机 一.类加载器 1.概述:在jvm中,负责将本地上的class文件加载到内存的对象 2.分类:- BootstrapClassLoader 根类加载器-->C语言写的,我们获取不 ...

  5. 2023 全球人工智能开发者先锋大会—AI 人才学习赛rank1方案分享

    简介 笔者thefan,目前为一所双非学校的大三在读本科生,对数据挖掘以及计算机视觉感兴趣,曾获得过讯飞房屋租金预测竞赛的top2,本次主要分享为2023 全球人工智能开发者先锋大会-AI 人才学习赛 ...

  6. 里奥老师乾坤大挪移—深入浅出KMP算法1

    早就想写关于KMP算法的文章了,但KMP算法对于初学者来说,属实不是一件易事,毕竟是考研的内容,还是有一点烧脑的,因此之前一直心生畏惧,打怵写这个话题.考虑到为广大读者出品优质的内容,终于还是鼓起勇气 ...

  7. 暴力+构造 Codeforces Round #283 (Div. 2) C. Removing Columns

    题目传送门 1 /* 2 题意:删除若干行,使得n行字符串成递增排序 3 暴力+构造:从前往后枚举列,当之前的顺序已经正确时,之后就不用考虑了,这样删列最小 4 */ 5 /************* ...

  8. HDU 5298 Solid Geometry Homework 暴力

    Solid Geometry Homework 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5298 Description Yellowstar ...

  9. Codeforces 1138B Circus (构造方程+暴力)

    题意: 给你两个01串,要你选n/2个位置,使得选的位置在s1中"1"的数量等于未选的s2中"1"的数量 n<=5000,1s 思路: 设两个串中出现&q ...

最新文章

  1. 主流机器学习[xgb, lgb, Keras, LR]
  2. tomcat.exe java home,tomcat.exe启动和startup.bat启动的不同
  3. 学习学习SpringSecurity
  4. linux 魔术分区,Parted Magic-Linux 中的分区魔术师
  5. 创建华丽 UI 的 7条规则 第一部分 (2019年更新)
  6. idea与myeclipse或eclipse使用编译时的区别
  7. Caffe学习:Data
  8. 暴风影音 打开 avi 视频文件时 explorer 出错 关闭
  9. Microsoft Office Visio 2007 下载
  10. 使用C++实现FC红白机模拟器 概述
  11. MATLAB对光路进行模拟,MATLAB辅助OptiSystem实现光学反馈环路的模拟
  12. mysql的explain执行计划_MySQL之Explain(执行计划)
  13. ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[16,77,3072]
  14. 【Matlab】使用反步法设计控制器
  15. 对网页 ‘’为所欲为‘’ 之手动实现 csdn深色模式?
  16. 转发:神了,Fly_by结构原来就这么回事儿!
  17. NVS4200M显卡“超频”
  18. Windows 10 安装STF实战
  19. get_calib_data_observ_points算子说明
  20. 双二极管钳位电路的原理分析

热门文章

  1. 为什么AI工程师成为当前薪资最高的技术岗位
  2. java继承接口和泛型,JavaSE习题 继承接口和泛型
  3. 多个goruntine 性能变慢_提高 JavaScript 性能的 12 个技巧
  4. linux图形界面鼠标变成小手_加载Linux系统,树莓派变身桌面电脑
  5. ecshop goods.php,重命名ecshop的商品页goods.php为shangpin.php
  6. python中csv文件把成绩加入_【学习笔记】python3中csv文件使用
  7. tutte定理证明hall定理_人教社课本现低级错误?“爱因斯坦用相对论证明勾股定理”...
  8. neo4j 查询同一节点的两个上级_WhatRoute for Mac(互联网流量诊断查询工具)
  9. 算法设计与分析——动态规划——01背包问题
  10. java流上传文档把磁盘撑满_BOOT目录磁盘占用满处理