CF720C Homework(构造)(暴力)

解析

本题的关键是暴力与构造结合的思想
本题一排排往上填的想法不难得出,但是在列数较小的时候就会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;
}
/*
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十二届蓝桥杯C++赛后感

文章目录A 空间卡片直线货物摆放路径时间显示G砝码称重H杨辉三角形双向排列J括号序列注&#xff1a;有些代码忘了考试时怎么写的了&#xff0c;&#xff08;我也懒得重新写&#xff09;&#xff0c;所以很多题的代码是acwing蓝桥杯讲解里的&#xff0c;我对其进行注释和修改A 空…

SeaweedFS在.net core下的实践方案

一直对分布式的文件储存系统很感兴趣&#xff0c;最开始关注淘宝的TFS&#xff08;Taobao File System&#xff09;&#xff0c;好像搁浅了&#xff0c;官方地址无法访问&#xff0c;github上面&#xff0c;各种编译问题&#xff0c;无意间发现了SeaweedFS链接seaweedfs测试了一…

[C++ STL algorithm] lower_bound、upper_bound、unique的本质

lower_bound&#xff1a;返回第一个大于等于查找值的地址upper_bound&#xff1a;返回第一个严格大于查找值的地址 使用这两个函数需要的头文件 #include <algorithm> using namespace std;要求数组必须是有序/单调的 lower_bound lower_bound( a 1, a n 1, x );意…

蓝桥杯 I.双向排序

题目链接 题解&#xff1a; 比赛时就直接写了一个暴力sort交上&#xff0c;能骗一点分是一点 昨晚看了acwing的讲解&#xff0c;现在结合我的思路更新正解 题目中设计两个操作&#xff0c;一个是选定前x个数&#xff0c;使其降序&#xff0c;另一个是选定后y个数&#xff0c…

YbtOJ-交换游戏【树链剖分,线段树合并】

正题 题目大意 给出两棵树&#xff0c;对于第一棵树的每一条边(x,y)(x,y)(x,y)询问有多少条在第二棵树上的边(u,v)(u,v)(u,v)与其交换&#xff08;连接的序号相同&#xff09;后两棵树依旧是一棵树。 1≤n≤21051\leq n\leq 2\times 10^51≤n≤2105 解题思路 先只考虑一棵树的…

模板:树状数组二分

所谓树状数组二分&#xff0c;就是在树状数组上进行二分 &#xff08;逃&#xff09; 解析 很巧妙 我们都知道可以在线段树上利用其本身平衡二叉的性质进行二分&#xff0c;很多时候能剩下一个log 但是树状数组其实也是可以二分的 说是二分&#xff0c;其实更像倍增 毕竟不…

微软收购Citus Data | 再次肯定对开源的承诺,并加速了Azure PostgreSQL的性能和扩展...

作者&#xff1a;Rohan Kumar 翻译&#xff1a;周宝峰 从左到右&#xff1a;微软开源关系数据库总经理Sudhakar Sannakkayala&#xff0c;Citus Data首席技术官兼联合创始人Ozgun Erdogan&#xff0c;Citus Data首席执行官兼联合创始人Umur Cubukcu&#xff0c;Citus Data工…

【CF1307F】Cow and Vacation(并查集+lca倍增)

description 点击查看题目 solution 考虑将边拆分&#xff0c;边长2\times 22 然后将kkk步以内可以互相走到的点用并查集合并在一起 同一个连通块的关键点可以相互走到 然后对于询问的两个城市&#xff0c;uuu向vvv走kkk步&#xff0c;vvv向uuu走kkk步&#xff0c;然后判断是…

AreYouBusy

AreYouBusy 题意: 给你n个工作集合&#xff0c;给你T的时间去做它们。给你m和s&#xff0c;说明这个工作集合有m件事可以做&#xff0c;它们是s类的工作集合&#xff08;s0,1,2&#xff0c;s0说明这m件事中最少得做一件&#xff0c;s1说明这m件事中最多只能做一件&#xff0c…

CF1404C:Fixed Point Removal(离线)(树状数组二分)

解析 写了不少线段树上二分&#xff0c;原来树状数组上也是可以二分的 首先如果ai>ia_i>iai​>i&#xff0c;那必然无法删除&#xff0c;下面只考虑ai<ia_i<iai​<i的情况 本题试图离线不难想到&#xff0c;但我一开始总是按照刻板思维尝试按序移动左端点&…

AT4439-[AGC028E]High Elements【结论,线段树】

正题 题目链接:https://www.luogu.com.cn/problem/AT4439 题目大意 给出1∼n1\sim n1∼n的排列aaa。求一个字典序最小的010101串sss满足将000对应位置按顺序取出成为序列AAA&#xff0c;剩下的成为序列BBB。 要求AAA和BBB的前缀最大值个数相同。 1≤n≤21051\leq n\leq 2\ti…

Docker最全教程——MongoDB容器化(十三)

上一节我们讲述了数据库容器化之持久保存数据&#xff0c;本节将讲诉MongoDB容器化实践&#xff0c;并且接下来将逐步讲解其他数据库&#xff08;MySql、Redis等等&#xff09;的容器化实践&#xff0c;然后将讲诉一些分布式架构的项目实践。由于实践需要花费大量的时间&#x…

一些数学小公式/定理的证明

文章目录定理①&#xff1a;类欧几里得算法公式①&#xff1a;等比数列求和②&#xff1a;等差数列一次方和③&#xff1a;等差数列二次方和结论①&#xff1a;n&11⇒3∣(2n−2)n\&11\Rightarrow 3|(2^n-2)n&11⇒3∣(2n−2)②&#xff1a;1222...n2n(n1)(2n1)61^22…

背包模型题目集合

文章目录背包模型01背包AcWing 423. 采药AcWing 1024. 装箱问题Luogu 2925 干草出售Proud Merchants完全背包P1616 疯狂的采药P1853 投资的最大效益Piggy-Bank多重背包Luogu P1776 宝物筛选HDU 1059 Dividing混合背包P1833 樱花二维费用背包问题P1507 NASA的食物计划HDU 2159 F…

CF1063F-String Journey【SAM,线段树】

正题 题目链接:https://www.luogu.com.cn/problem/CF1063F 题目大意 给出一个字符串&#xff0c;求选出kkk个不交子串满足按照起始位置排序后&#xff0c;满足下一个是上一个的真子串。 求kkk的最大值。 1≤n≤51051\leq n\leq 5\times 10^51≤n≤5105 解题思路 首先我们肯…

CF1406D:Three Sequences(贪心、构造)

解析 本题说明了样例的重要性 完全可以通过仔细观察样例得出一些结论 首先最大值显然就是max⁡(b1,cn)\max(b_1,c_n)max(b1​,cn​) 考虑最优策略 如果a上升了&#xff0c;就让b上升 因为假设前面都拼的严丝合缝了&#xff0c;让c上升前面全得上升&#xff0c;肯定会对答案有…

在.NET Core中使用Exceptionless分布式日志收集框架

一.Exceptionless简介Exceptionless 是一个开源的实时的日志收集框架&#xff0c;它可以应用在基于 ASP.NET&#xff0c;ASP.NET Core&#xff0c;Web Api&#xff0c;Web Forms&#xff0c;WPF&#xff0c;Console&#xff0c;MVC 等技术栈的应用程序中&#xff0c;并且提供了…

YbtOJ-选点构形【欧拉函数】

正题 题目链接:https://www.ybtoj.com.cn/contest/351/problem/1 题目大意 一个圆上&#xff0c;你需要在3∼n3\sim n3∼n中选出kkk个作为aia_iai​&#xff0c;然后再圆上选择最少的点使得对于每个aia_iai​你都能用选出的点连成一个正aia_iai​边形。 k2≤n≤106k2\leq n\l…

CF1406E:Deleting Numbers(构造、根号分块)

解析 打表发现1e5以内的质因子是9592个 就是它没错了 容易想到枚举因子判断答案是否异常来判断是否包含该质因子 但是这个方法在最小质因子处是不奏效的 那么如何找到最小的质因子呢&#xff1f; 考虑把所有的质因子分成m\sqrt mm​块 然后每扫完一块&#xff0c;问一下 (A,…

test1 3-15 模拟赛1

文章目录考试复盘matrixsetstring考试复盘 首先先说T1T1T1&#xff0c;嗯&#xff0c;发现了列是相互独立的&#xff0c;所以分开考虑了 但是实在没想到线性基&#xff0c;就顺着自己的思路硬搞了505050跑路 老实说&#xff0c;505050分的部分分写得都是迷迷糊糊的&#xff0c;…