###2018.10

A.oxx 的小姐姐们

oxx 和他的小姐姐(们)躺在图书馆前的大草坪上看星星。

有强迫症的 oxx 想要使得他的小姐姐们正好躺成一块 n×m 的长方形。

已知小姐姐的形状是 1×p 的长方形(可以横着或竖着躺)。小姐姐从 1 到 nm 编号总共有 nm 个(如果可以的话,绝对够用)。

P.S. 小姐姐是 1×p 的是因为她们比较苗条。

输入

输入三个整数 n, m, p (1≤n,m,p≤100,p 是质数)。

输出

如果不行,输出 No

否则输出 Yes。随后输出 n 行 m 列正整数用空格隔开。同一个小姐姐用相同的数字表示,不同的小姐姐用不同的数字表示。数字应是在 [1,nm] 范围内的正整数。同一个数字至多出现 p 次,这 p 次应该在横向连续,或者纵向连续。

如果有多解输出任意一解。

样例

input
2 3 2
output
Yes
2 2 3
1 1 3
input
3 3 2
output
No
input
3 3 3
output
Yes
2 2 2
1 1 1
3 3 3
input
2 3 2
output
Yes
6 3 3
6 4 4
input
4 2 2
output
Yes
2 7
2 7
5 5
3 3

提示

请注意对于最后一组样例输出:

2 1
2 1
1 2
1 2

是不合法的。因为不同的小姐姐必须用不同的数字表示。你居然把 1 号小姐姐和 2 号小姐姐克隆了 QAQ。

解题思路:p是质数,如果n*m%p!=0时,显然为"No";否则一定能用多块1*p的矩形覆盖满方阵:考虑先对行进行横线填充,再对行剩下的列进行纵向填充。

AC代码:

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=;
int n,m,p,t,cnt,tp,mp[maxn][maxn];
int main(){
while(cin>>n>>m>>p){
t=n*m;
if(t%p)cout<<"No"<<endl;
else{
memset(mp,,sizeof(mp));cnt=;
cout<<"Yes"<<endl;
for(int x=;x<=n;++x){///先对行进行填充
for(int y=;y<=m-m%p;++y){
mp[x][y]=cnt;
if(y%p==)cnt++;///填满一块1*p的矩形
}
}
for(int y=m-m%p+;y<=m;++y){///再对剩余的列进行填充
for(int x=;x<=n-n%p;++x){
mp[x][y]=cnt;
if(x%p==)cnt++;
}
}
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
cout<<mp[i][j]<<(j==m?'\n':' ');
}
}
return ;
}

###2018.11

B.转机折扣

你女朋友最近又不理你了。这一定是因为你上个月没有去浦东看她。异地恋实在是太辛苦了,浦西到浦东的距离,对于你来说,就像是上海到北京的距离。

曾有诗这样写道:

世上最遥远的距离,不是生与死的距离,不是天各一方,而是我就站在你面前,你却不知道我爱你。

你决定乘坐航班从虹桥飞往浦东,希望能挽回你女朋友的心。

众所周知,虹桥没有直飞浦东的航班,你需要找一个机场转机。虽然你不在乎这个经济成本,但是,幸运的是,为了庆祝双十一,航空公司推出了一个活动,若你从机场 A 乘坐航班飞往机场 B,机场 B 接着飞往机场 C,且机场 B 的字典序在机场 A 和机场 C 之间的,可以享受 9 折优惠。

所有机场的名字长度都是相等的。

一句话题意:给出等长的两个字符串 s 和 t,要求一个与他们等长的字符串字典序比其中一个大,但比另外一个小。

输入

输入两行两个等长的非空字符串 s, t。长度不超过 105,由英文大写字母组成。

输入保证有解。

输出

输出一个与输入的字符串等长的字符串,也由英文大写字母组成。如果有多解,输出任意一解。

样例

input
SHA
PVG
output
PZI
input
ZSPD
ZSSS
output
ZSQD
解题思路:将两个字符串看成两个数来处理,较小的数加1即可。注意末尾的字符如果是'Z',则先变成'A',并且向前进位1,否则直接加1即可(题目保证一定有解),加完直接break。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e5+;
char s1[maxn],s2[maxn];
int main(){
while(~scanf("%s%s",s1,s2)){
if(strcmp(s1,s2)>)swap(s1,s2);
for(int i=strlen(s1)-;i>=;--i){
if(s1[i]=='Z')s1[i]='A';
else {s1[i]++;break;}
}
printf("%s\n",s1);
}
return ;
}

最新文章

  1. iOS加密方式及解压缩文件
  2. jsp发布:tomcat+花生壳
  3. .net解决程序集版本冲突的方法
  4. wireshark过滤语法总结
  5. Junit测试中的setup和teardown 和 @before 和 @After 方法
  6. 转!!java泛型概念(泛型类,接口,方法)
  7. Shell中set用法(转载)
  8. Java金字塔及变形
  9. 查询表达式Linq
  10. 公司简介 - CCDI悉地国际-工程实践专业服务的引领者
  11. linux上磁盘的操作相关命令
  12. mybatis关于ORM的使用以及设计(一)[ORM的初始化]
  13. HttpClient异步调用引发的程序挂起问题排查及解决
  14. linux --- 1.初始linux
  15. redis内部分享ppt
  16. MySQL(十三)事务处理和字符集
  17. chrome浏览器好用的插件
  18. 详解JNDI的lookup资源引用java:/comp/env
  19. Chrome插件笔记之content_scripts
  20. 使用Struts时,JSP中如何取得各个会话中的参数值?

热门文章

  1. 白帽子讲web安全读后感
  2. POJ 2482 Stars in Your Window(线段树+扫描线)
  3. Flume接收器组的指数退避上限
  4. ZeroMQ 初步认识
  5. 使用cwRsync在Windows的目录之间增量同步文件
  6. rails用generate为两个模型创建has_and_belongs_to_many中间表
  7. YTU 2420: C语言习题 不等长字符串排序
  8. codeforces 690C3 C3. Brain Network (hard)(lca)
  9. 「NetworkOnMainThreadException」:Android 2.3到Android 4.0上传文件的问题
  10. MongoDB 用户名密码登录