Secret Poems 2017ACM-ICPC北京赛区/hihoCoder1632
来源:互联网 发布:js在win7下不能运行 编辑:程序博客网 时间:2024/05/21 08:01
题意: 题目意思就是将两个不同规则的字符数组进行相互转换。
思路: 将题目的解答分成两部分,第一部分是将 figure 1 的数组转换成一维数组,第二部分是将一维数组中的字符填入 figure 2 的数组中。
针对第一部分,将 figure 1 的二维数组旋转四十五度再观察,能够发现奇数行是从左往右,偶数行是从右往左;上半部分中,每行边上的结点移动是右、下不断更替,下半部分中,每行边上的结点移动是下、右不断更替。
对于第二部分,通过对当前位置的判断进行移动,直到填满为止。
代码:
#include<cstdio>#include<cstring>#include<cstdlib>#include<stack>#include<queue>#include<utility>#include<vector>#include<cmath>#include<set>#include<map>#include<iostream>#include<algorithm>#include<sstream>using namespace std;typedef long long LL;int N;char G[110][110];char ch[10010];char ans[110][110];int main(){ //freopen("in.txt", "r", stdin); while(scanf("%d", &N) == 1){ for(int i=1; i<=N; i++){ scanf("%s", &G[i][1]); } int x=1, y=1; int tot = 0; bool right = true; bool bhalf = true; for(int i=1; i<=2*N-1; i++){ if(i == N) bhalf = false; ch[tot++] = G[x][y]; for(int j=1; j<min(i, 2*N-i); j++){ if(i & 1){ x--; y++; } else{ x++; y--; } ch[tot++] = G[x][y]; } if(right){ if(bhalf) y++; else x++; } else{ if(bhalf) x++; else y++; } right = !right; } ch[tot] = '\0'; //printf("%s\n", ch); memset(ans, 0, sizeof(ans)); x = 1, y = 1; tot = 0; int mov = 0; //0 表示向右,1 表示向下,2 表示向左,3 表示向上 while(true){ ans[x][y] = ch[tot++]; if(tot == N*N) break; if(x==1&&y==N || isupper(ans[x-1][y])&&!isupper(ans[x+1][y])&&isupper(ans[x][y-1])&&isupper(ans[x][y+1])) mov = 1; else if(x==N&&y==N || isupper(ans[x-1][y])&&isupper(ans[x+1][y])&&!isupper(ans[x][y-1])&&isupper(ans[x][y+1])) mov = 2; else if(x==N&&y==1 || !isupper(ans[x-1][y])&&isupper(ans[x+1][y])&&isupper(ans[x][y-1])&&isupper(ans[x][y+1])) mov = 3; else if(y==1&&isupper(ans[x-1][y]) || isupper(ans[x-1][y])&&isupper(ans[x+1][y])&&isupper(ans[x][y-1])&&!isupper(ans[x][y+1])) mov = 0; if(mov == 0) y++; else if(mov == 1) x++; else if(mov == 2) y--; else if(mov == 3) x--; } for(int i=1; i<=N; i++){ for(int j=1; j<=N; j++){ putchar(ans[i][j]); } putchar('\n'); } } return 0;}
阅读全文
0 0
- Secret Poems 2017ACM-ICPC北京赛区/hihoCoder1632
- ACM-ICPC北京赛区2017网络同步赛(题目6 : Secret Poems)
- ACM-ICPC北京赛区2017网络同步赛 题目6 : Secret Poems
- 2017ACM-ICPC亚洲区域赛北京站 F.Secret Poems(模拟)
- 2017 ACM-ICPC 亚洲区(北京赛区)网络赛
- 2017 ACM-ICPC 亚洲区(北京赛区)网络赛
- ACM-ICPC北京赛区网络赛2017-minimum(线段树)
- 第一次参加ACM比赛 2017ICPC北京赛区
- Cats and Fish 2017ACM-ICPC北京赛区/hihoCoder 1631
- ACM/ICPC北京赛区网络赛
- 2017icpc 北京赛区 总结
- hihoCoder 1632 secret poem (2017北京赛区)
- 2017ACM-ICPC西安赛区
- 2011 ACM/ICPC 北京现场赛 B HouYi's secret
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛-题目9 : Minimum-(线段树)
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛-题目1 : Visiting Peking University
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 题目1 : Visiting Peking University
- Minimum (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 题9)
- 二叉树(查询和删除)
- Android开发日常快捷键(不断更新)
- git&github常用日常
- layui实现数据分页功能
- MySql 数据库“索引”初体验
- Secret Poems 2017ACM-ICPC北京赛区/hihoCoder1632
- RXDownload实现下载apk
- 分类中的训练数据集不均衡问题处理
- Anaconda+python 进行FFT算法
- 强制类型转换实例
- 如何使Linux系统支持更高的并发
- Log4J配置文件
- c_str()函数
- Android 解析Excel (xls格式)