Below the Diagonal CodeForces - 266C
2021/8/27 6:06:09
本文主要是介绍Below the Diagonal CodeForces - 266C,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原题链接
考察:思维
错误思路:
暴力模拟,但是步骤没有统一的规矩.
思路:
递归思想.因为需要将每个棋子放在主对角线以下.那么首先保证最后一列无\(1\),那么再交换有\(1\)的行和最后一行,这样怎么也不会换到对角线上.然后可以发现最后一行,最后一列可以去掉,再重复上面的步骤
Code
#include <iostream> #include <cstring> #include <algorithm> using namespace std; typedef pair<int,int> PII; const int N = 1010; int n,row[N],col[N],mp[N][N],cnt; int ans[N*100][3]; void solve(int n) { if(n==1) return; for(int i=1;i<n;i++) if(!col[i]) { //交换列 ans[++cnt][0] = 2; ans[cnt][1] = i; ans[cnt][2] = n; for(int j=1;j<=n;j++) swap(mp[j][i],mp[j][n]); swap(col[i],col[n]); break; } //获取空白列 for(int i=1;i<n;i++) if(row[i]) { //交换i与n行 ans[++cnt][0] = 1; ans[cnt][1] = i,ans[cnt][2] = n; for(int j=1;j<=n;j++) swap(mp[i][j],mp[n][j]) ; swap(row[i],row[n]); break; } for(int i=1;i<=n;i++) if(mp[n][i]) { col[i]--; } solve(n-1); } int main() { scanf("%d",&n); for(int i=1;i<n;i++) { int x,y; scanf("%d%d",&x,&y); row[x]++,col[y]++; mp[x][y]++; } solve(n); printf("%d\n",cnt); for(int i=1;i<=cnt;i++) { for(int j=0;j<3;j++) printf("%d ",ans[i][j]); printf("\n"); } return 0; }
这篇关于Below the Diagonal CodeForces - 266C的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站