网站策划书案例,宣传片公司哪家好,域名验证网站,做网站排名要多少钱题干#xff1a;
Time limit per test: 1.0 seconds
Memory limit: 512 megabytes
oxx 和他的小姐姐#xff08;们#xff09;躺在图书馆前的大草坪上看星星。
有强迫症的 oxx 想要使得他的小姐姐们正好躺成一块 nm 的长方形。
已知小姐姐的形状是 1p 的长方形#xf…题干
Time limit per test: 1.0 seconds
Memory limit: 512 megabytes
oxx 和他的小姐姐们躺在图书馆前的大草坪上看星星。
有强迫症的 oxx 想要使得他的小姐姐们正好躺成一块 n×m 的长方形。
已知小姐姐的形状是 1×p 的长方形可以横着或竖着躺。小姐姐从 1 到 nm 编号总共有 nm 个如果可以的话绝对够用。
P.S. 小姐姐是 1×p 的是因为她们比较苗条。
Input
输入三个整数 n , m , p (1≤n,m,p≤100 p 是质数)。
Output
如果不行输出 No。
否则输出 Yes。随后输出 n 行 m 列正整数用空格隔开。同一个小姐姐用相同的数字表示不同的小姐姐用不同的数字表示。数字应是在 [1nm] 范围内的正整数。同一个数字至多出现 p 次这 p 次应该在横向连续或者纵向连续。
如果有多解输出任意一解。
Examples
Input
2 3 2Output
Yes
2 2 3
1 1 3Input
3 3 2Output
NoInput
3 3 3Output
Yes
2 2 2
1 1 1
3 3 3Input
2 3 2Output
Yes
6 3 3
6 4 4Input
4 2 2Output
Yes
2 7
2 7
5 5
3 3Note
请注意对于最后一组样例输出
2 1
2 1
1 2
1 2是不合法的。因为不同的小姐姐必须用不同的数字表示。你居然把 1 号小姐姐和 2 号小姐姐克隆了 QAQ。 解题报告 题目不算难那直接模拟就好了。先由样例可以试出来No的条件。然后剩下Yes的构造一个解就可以了。首先为了统一令列数大于行数swap一下即保证这是一个躺着的矩形然后按行遍历填数字然后对于剩下还没有填的按每一列进行遍历填数字就可以了。最后输出的时候看最初是否行列交换过来判断输出格式。
AC代码
#includebits/stdc.husing namespace std;
int n,m,p;
int maze[105][105];
bool bk[105][105];
int main()
{cinnmp;if(n%p0 || m%p0) puts(Yes);else {puts(No);return 0;}int cur 1,cnt 0;bool flag 0;if(n m) flag1,swap(n,m);for(int i 1; in; i) {for(int j 1; jm-(m%p); j) {maze[i][j] cur;bk[i][j]1;cnt;if(cnt % p 0) cur;}}int st m-(m%p)1;for(int i st; im; i) {for(int j 1; jn; j) {if(bk[j][i] 0) {maze[j][i] cur;bk[j][i]1;cnt;if(cnt%p0) cur;}}}if(flag) {for(int i 1; im; i) {for(int j 1; jn; j) {printf(%d%c,maze[j][i],jn?\n : );}}}else {for(int i 1; in; i) {for(int j 1; jm; j) {printf(%d%c,maze[i][j],jm?\n : );}}}return 0 ;
}
总结 1.有的时候多开一个bk数组会省好多事。 2.刚开始对于剩下的想直接遍历整个矩阵如果bk0那就填数但是发现不行因为就填不成以列了。