Codeforces Round #252 (Div. 2) C. Valera and Tubes
【题目大意】
C题:
给你一个一个n行m列的长方形表,相当于一个二维数组,不过是从1开始的,用(x,y)表示一个单元。
现在需要放置k个管道在这些单元中:
1.r>=2;
2.对于各个单元满足:|xi - xi + 1| + |yi - yi + 1| = 1 holds;
3.每个单元只能放一个管道;
如果满足一下条件,则安放管道在该单元:
1.没有一对管道共用一个单元;
2.每一个单元属于一些管道;
请帮助他使用这种方式来将k根管道安排在这个矩形中。
【题目分析】
前k-1步每次走2格,最后一次走完剩下的格子即可,简单的贪心。

#include <cstdio> #include <iostream> #include <algorithm> #define MAXN 100010 #define ll long long using namespace std; int n, m, k, cnt, col, row; int x[MAXN], y[MAXN]; int main(void) { while(cin >> n >> m >> k) { cnt = 1; x[1] = 1; row = 1; y[1] = 1; col = 1; while(cnt <= n*m) { cnt++; if((col==m&&row%2) || (col==1&&row%2==0)) { row++; x[cnt] = row; y[cnt] = col; } else { if(row % 2) { col++; } else { col--; } x[cnt] = row; y[cnt] = col; } } int j = 1; for(int i=1; i<k; ++i) { cout << "2 " << x[j] << " " << y[j] << " "; ++j; cout << x[j] << " " << y[j] << endl; ++j; } cout << cnt-j << " "; for(int i=j; i<cnt-1; ++i) { cout << x[i] << " " << y[i] << " "; } cout << x[cnt-1] << " " << y[cnt-1] << endl; } return 0; }
作者:北岛知寒
出处:https://www.cnblogs.com/crazyacking/p/3777122.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?