传送门

文章目录

  • 题意:
  • 思路:

题意:

给你一个n∗mn*mn∗m的矩阵,每两个相邻点之间有个双向边,问你能不能走满kkk步,每一步走的边不同,但是点可以相同,换句话说就是走的边不能再走了。输出的时候输出一个fff和一串不超过444个的字符,表示按照这个字符走fff次。输出的行数不能超过300030003000行。

思路:

能看出来这是个欧拉回路,每个点度数为偶数,一定有解,所以先判断一下是否≤(4∗n∗m−2∗n−2∗m)\le (4*n*m-2*n-2*m)≤(4∗n∗m−2∗n−2∗m)。
判断有解后,我们考虑如何构造解。
一开始我想的是先走完一行和一列,让后将问题转换成(n−1)∗(n−1)(n-1)*(n-1)(n−1)∗(n−1)的子问题,但是这显然是不行的,因为从111出发,想要每个边走一遍,那么终点一定在111号点,所以考虑其他构造方法。
由于我们有300030003000的限制,所以我们不能随便构造,下面介绍一个非常简单就能实现的构造方法:
(1)(1)(1)先走m−1m-1m−1步到最右边。
(2)(2)(2)向下走n−1n-1n−1步到最下边。
(3)(3)(3)向上走n−1n-1n−1步回到刚才的点。
(4)(4)(4)向左走一步。
(5)(5)(5)重复(2),(3),(4)(2),(3),(4)(2),(3),(4),一直回到起点111。
(6)(6)(6)向下走一步。
(7)(7)(7)向右走m−1m-1m−1步。
(8)(8)(8)向左走m−1m-1m−1步。
(9)(9)(9)重复(6),(7),(8)(6),(7),(8)(6),(7),(8),一直到最下面的点。
(10)(10)(10)向上走n−1n-1n−1步。
这个方案的总次数上限是6∗n6*n6∗n,当然达不到上限,正好是300030003000,所以可行。
当然我们还有更好的构造方法。
考虑题目说的字符串不超过444个,所以利用这个性质考虑优化。
可以发现,我们上面(2),(3)(2),(3)(2),(3)步是一直走到底,我们考虑只往下走一个位置,再向上走一个位置,再向左走一个位置,这个操作字符是DULDULDUL,我们执行n−1n-1n−1次即可。每一行都可以这样做。但是最后一行只能先RRR再LLL,因为他下面没有行了。
第二种的实现细节很多,就懒得写了。

// Problem: D. Time to Run
// Contest: Codeforces - Codeforces Round #619 (Div. 2)
// URL: https://codeforces.com/contest/1301/problem/D
// Memory Limit: 256 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,char> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m,k;
vector<PII>ans;void run(int cnt,char ch)
{if(!k||!cnt) return;if(cnt>=k){ans.pb({k,ch});k=0;return;}k-=cnt;ans.pb({cnt,ch});
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);scanf("%d%d%d",&n,&m,&k);if(4*n*m-2*n-2*m<k) { puts("NO"); return 0; }puts("YES");run(m-1,'R');for(int i=1;i<m;i++) run(n-1,'D'),run(n-1,'U'),run(1,'L');for(int i=1;i<n;i++) run(1,'D'),run(m-1,'R'),run(m-1,'L');run(n-1,'U');printf("%d\n",ans.size());for(auto x:ans) printf("%d %c\n",x.X,x.Y);return 0;
}
/**/

Codeforces Round #619 (Div. 2) D. Time to Run 矩阵回路构造相关推荐

  1. Codeforces Round #619 (Div. 2) E. Nanosoft 思维 + 二维前缀和

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑到最大面积是由四种颜色构成的,且四种颜色可以从中心扩展出去,所以我们分别维护四种颜色的二维前缀和,O(1)O(1)O(1)计算矩阵内颜色的个数.现 ...

  2. Codeforces Round #619 (Div. 2)

    文章目录 Codeforces Round #619 (Div. 2) B - Motarack's Birthday C - Ayoub's function E. Nanosoft Codefor ...

  3. Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造

    传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...

  4. Codeforces Round #619 (Div. 2) F. Super Jaber 多源bfs + 思维转换

    传送门 文章目录 题意: 思路: 题意: 给你一个矩阵,每个格子都有一个颜色kkk,每秒可以移动到相邻矩阵或者瞬移到同一颜色的任意矩阵.有qqq个询问,每次询问给出两个点,求从一个点到另一个点的最短时 ...

  5. Codeforces Round #619 (Div. 2) 2020.02.14

    文章目录 A 题目 翻译 例子 思路 代码 B 题目 翻译 例子 大意 思路 代码 C 题目 翻译 例子 大意 思路 代码 A 题目 You are given three strings a, b ...

  6. Codeforces Round #706 (Div. 2) E. Garden of the Sun 思维构造

    传送门 题意: 给你一个n×mn×mn×m的矩阵,其中包含字符′.′'.'′.′和′X′'X'′X′,你可以将任何′.′'.'′.′改成′X′'X'′X′,现在问你能否通过修改一些′.′'.'′.′来 ...

  7. Codeforces Round #701 (Div. 2) D. Multiples and Power Differences 思维构造

    传送门 题意: 给定一个矩阵aaa,让你构造一个矩阵bbb,要求矩阵bbb的每个元素是aaa对应位置元素的倍数,且矩阵bbb的每两个相邻元素相差为k4(k>=1)k^4(k>=1)k4(k ...

  8. Codeforces Round #236 (Div. 2) C. Searching for Graph(水构造)

    题目大意 我们说一个无向图是 p-interesting 当且仅当这个无向图满足如下条件: 1. 该图恰有 2 * n + p 条边 2. 该图没有自环和重边 3. 该图的任意一个包含 k 个节点的子 ...

  9. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

最新文章

  1. (转)分布式文件存储FastDFS(五)FastDFS常用命令总结
  2. freeimage ubuntu安装
  3. 利用python3.x实现小爬虫下载贴吧内图片
  4. 廖雪峰python学习笔记——函数式编程
  5. MySQL深入(一)
  6. 初三学生多会筹备计算机中考考试,2020年的初中生注意,中考将会发生这几大变化,最好提前准备...
  7. vue如何使浏览器url固定_怎么给 vue的 vue-router url地址最后加上 / 斜杠
  8. 前端学习(2178):vue-router得参数传递二
  9. 游戏是如何限制多开的,如何解决
  10. 书单|互联网企业面试案头书之架构师篇
  11. 用FileInputStream和FileOutPutStream读写文件
  12. VTK(五)---内窥镜漫游(基于VMTK血管中心线提取)
  13. 用html写个人简历
  14. OpenCV3.1安装包下载
  15. 程序员工作交接文档怎么写_浅谈程序员该如何做好工作交接?
  16. 软件开发者的软实力:沟通与协作
  17. 哈工大ltp词性标注列表和ICTCLAS词性列表
  18. 技巧1——怎样查看linux发行版本名称和版本号?
  19. 硕士论文如何通过查重?
  20. 为何自从熊猫烧香以后中国再也没有爆发过类似于此的大规模网络病毒事件?

热门文章

  1. python开机号_感知机(python实现)
  2. nodejs项目_多人群聊实现其实很简单:Nodejs+WebSocket+Vue轻松实现Web IM
  3. 史上最会抄的数学家!把阿拉伯数字直接抄进自己的书里,连中国几千年前的名著都惨遭毒手.........
  4. 每个程序员都应该知道的基础数论
  5. axure 组件_技巧分享 | Axure后台组件制作的全过程
  6. python3读取文件夹-python3获取文件及文件夹大小
  7. helm安装postgres_添加到postgres数据库外的keycloak k8s helm chart环境参数
  8. 计算机bq,BQ24721部分翻译
  9. 乔安监控云存储_智能运维丨全栈监控,护航云上业务
  10. PTA 数据结构与算法题目集(中文)