Secret Poems HihoCoder - 1632(模拟)

本文介绍了一种特殊的历史背景下的诗歌加密方式——秘密诗歌,并提供了一种算法来实现从旧版秘密诗歌到新版的秘密诗歌的转换。文章通过具体实例展示了这种转换的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Secret Poems HihoCoder - 1632

The Yongzheng Emperor (13 December 1678 – 8 October 1735), was the fifth emperor of the Qing dynasty of China. He was a very hard-working ruler. He cracked down on corruption and his reign was known for being despotic, efficient, and vigorous.

Yongzheng couldn’t tolerate people saying bad words about Qing or him. So he started a movement called “words prison”. “Words prison” means literary inquisition. In the famous Zhuang Tinglong Case, more than 70 people were executed in three years because of the publication of an unauthorized history of the Ming dynasty.

In short, people under Yongzheng’s reign should be very careful if they wanted to write something. So some poets wrote poems in a very odd way that only people in their friends circle could read. This kind of poems were called secret poems.

A secret poem is a N×N matrix of characters which looks like random and meaning nothing. But if you read the characters in a certain order, you will understand it. The order is shown in figure 1 below:

[f.png]

            figure 1                                                           figure 2

Following the order indicated by arrows, you can get “THISISAVERYGOODPOEMITHINK”, and that can mean something.

But after some time, poets found out that some Yongzheng’s secret agent called “Mr. blood dripping” could read this kind of poems too. That was dangerous. So they introduced a new order of writing poems as shown in figure 2. And they wanted to convert the old poems written in old order as figure1 into the ones in new order. Please help them.

Input

There are no more than 10 test cases.

For each test case:

The first line is an integer N( 1 <= N <= 100), indicating that a poem is a N×N matrix which consist of capital letters.

Then N lines follow, each line is an N letters string. These N lines represent a poem in old order.

Output

For each test case, convert the poem in old order into a poem in new order.

Sample Input

5
THSAD 
IIVOP 
SEOOH 
RGETI 
YMINK
2
AB
CD
4
ABCD
EFGH
IJKL
MNOP

Sample Output

THISI
POEMS
DNKIA
OIHTV
OGYRE
AB
DC
ABEI
KHLF
NPOC
MJGD
题意:

将题目给的第一种形式的矩阵转变成第二种输出

分析:

费劲的模拟

code:

#include <bits/stdc++.h>
using namespace std;
int n;
char G[110][110];
char ans[110][110];
char ans2[110][110];
int main(){
    while(~scanf("%d",&n)){
        for(int i = 0; i < n; i++){
            scanf("%s",G[i]);
        }
        int x = 0,y = 0;
        int row = 0,col = 0;
        int flag = 0;
        int flag2 = 0;
        while(1){
            ans[row][col] = G[x][y];
            if((x == 0 || y == 0 || x == n-1 || y == n-1) && flag2 == 0){
                if(x == n-1 && y == n-1) break;
                if(x == 0 && y == 0){
                    y++;
                    flag = 1;
                    flag2 = 1;
                }
                else if(x == 0 || y == n-1){
                    if(x == 0 && y == n-1) x++;
                    else if(x == 0) y++;
                    else if(y == n-1) x++;
                    flag = 1;
                    flag2 = 1;
                }
                else if(x == n-1 || y == 0){
                    if(x == n-1) y++;
                    else if(y == 0) x++;
                    flag = 2;
                    flag2 = 1;
                }
            }
            else{
                flag2 = 0;
                if(flag == 1){
                    x++;
                    y--;
                }
                else if(flag == 2){
                    x--;
                    y++;
                }
            }
            col++;
            if(col == n){
                col = 0;
                row++;
            }
            if(row == n) break;
        }
        row = 0;
        col = 0;
        flag = 0;
        memset(ans2,'#',sizeof(ans2));
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                ans2[row][col] = ans[i][j];
                if(flag == 0){
                    col++;
                    if(col == n-1 || ans2[row][col+1] != '#') flag = 1;
                }
                else if(flag == 1){
                    row++;
                    if(row == n-1 || ans2[row+1][col] != '#') flag = 2;
                }
                else if(flag == 2){
                    col--;
                    if(col == 0 || ans2[row][col-1] != '#') flag = 3;
                }
                else if(flag == 3){
                    row--;
                    if(ans2[row-1][col] != '#') flag = 0;
                }
            }
        }
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                putchar(ans2[i][j]);
            }
            putchar('\n');
        }
    }
    return 0;
}
要下载 `poems.txt` 数据集,通常可以通过以下几种方法实现: ### 方法一:手动查找并下载 如果该数据集已经公开发布,则可以访问其官方存储位置或托管平台(如 GitHub、Kaggle 或其他学术资源站点)。以下是可能的操作流程: 1. 访问已知的在线数据库或项目页面。 2. 查找是否有提供直接下载链接。 3. 使用浏览器点击下载按钮或将命令复制到终端执行。 例如,在 Linux/MacOS 终端或者 Windows PowerShell 中运行 wget 命令来获取远程文件: ```bash wget https://example.com/path/to/poems.txt ``` 注意替换上面 URL 地址为实际有效的网络地址[^1]。 ### 方法二:编写脚本自动抓取 当无法找到现成的数据包时,也可以考虑利用 Python 编程语言配合 requests 库以及 BeautifulSoup 等工具自行采集相关内容。下面给出一段简单的示范代码用于模拟从某假定网站提取古诗词信息并保存至本地文本文件的过程: ```python import requests from bs4 import BeautifulSoup url = "http://some-poetry-site.example/" # 替换为目标网址 response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') titles = soup.find_all('h2') # 调整选择器匹配具体结构 verses = [] for t in titles: verse_text = "" next_node = t.next_sibling while True: if not next_node or isinstance(next_node, str) and '\n' != next_node.strip(): break elif '<br/>' == repr(next_node).lower().strip(): pass else: verse_line = ''.join([str(x) for x in list(next_node.children)]) verse_text += verse_line + "\n" next_node = next_node.nextSibling verses.append((t.text.strip(),verse_text)) with open("poems.txt","w+",encoding="utf-8") as f_out: for v in verses: f_out.write("{}:{}\n".format(*v)) ``` 此段程序会遍历指定网页上的所有 h2 元素作为标题,并尝试捕获紧随其后的诗句内容直到遇到下一个同级节点为止。最终结果将以冒号分隔的形式记录下来以便后续分析处理[^4]。 另外需要注意的是,某些情况下目标服务器可能会设置反爬机制阻止频繁请求行为;此时建议适当加入延时逻辑减少干扰风险的同时尊重对方服务条款规定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值