HihoCoder - 1632 Secret Poems(规律题)

本文详细解析了一种名为SecretPoems的矩阵变换算法,该算法通过特定的规则将输入的n*n矩阵元素重新排列并输出。文章通过示例阐述了算法的工作原理,包括两个变换函数change1和change2的具体实现,以及它们如何共同作用于矩阵元素的移动。通过阅读本文,读者可以了解SecretPoems算法的基本思想和实现细节。

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

【题目】

Secret Poems

【题意】

给定n*n的矩阵,按左边的顺序再以右边的顺序输出。(讲道理我没看题哈哈哈,典型样例推题意)

【思路】

规律显而易见,就是实现起来有点麻烦。

change1表示图二的位置变化,change2表示图一,因为我一开始把图一的想简单了先搞的图二。好像没什么好讲的...

上代码。

【代码】

const int dx[]={1,0,-1,0};
const int dy[]={0,-1,0,1};
char a[105][105],b[105][105];
int x,y,xx,yy,tx,ty,f,ff;
int n;
void change1()
{
    if(f==3&&yy==ty) f=0;
    else if(f==0&&xx==tx) f=1;
    else if(f==1&&yy==n+1-ty) f=2,tx--;
    else if(f==2&&xx==n+1-tx) f=3,ty--;
    xx+=dx[f],yy+=dy[f];
}
void change2()
{
    if(x<n&&y<n){
        if(x==1&&(x+y)%2==0) y++;
        else if((y+x)%2&&y==1) x++;
        else if((x+y)%2) x++,y--;
        else x--,y++;
    }
    else{
        if(x==n&&(x+y)%2) y++;
        else if((y+x)%2==0&&y==n) x++;
        else if((x+y)%2) x++,y--;
        else x--,y++;
    }
}
int main()
{
    while(~scanf("%d",&n)){
        for(int i=1;i<=n;i++)
            scanf("%s",a[i]+1);
        xx=1,yy=1,x=1,y=1;
        f=3,ff=1;
        tx=n,ty=n;
        for(int i=1;i<=n*n;i++){
            b[xx][yy]=a[x][y];
            change1(); change2();
        }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                printf(j<n?"%c":"%c\n",b[i][j]);
    }
}

 

要下载 `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、付费专栏及课程。

余额充值