洛谷P4431
2019-04-25 06:49:58来源:博客园 阅读 ()
题意翻译
题目大意:
给定一个n∗m的矩阵,每次你可以选择前进一格或转弯(90度),求在不出这个矩阵的情况下遍历全部格点所需最少转弯次数。有多组数据
输入格式:
第一行一个整数k,表示数据组数
以下k行,每行两个整数n,m,表示矩阵大小
输出格式:
输出一个整数,即最少转弯次数
感谢@守望 提供翻译
题目描述
Mirko wants to buy land on which he will build a house for his family. So far, he’s seen K pieces of land. Each of them is in the shape of a rectangle and we can think of it as a matrix with N rows and M columns, N × M fields in total.
Mirko is aware that, before construction begins, the property needs to be regularly maintained and the lawn needs to be mowed. Because of this, Mirko bought a lawn mower. In order to mow the entire lawn of N rows and M columns, he needs to go over each field at least once. He can start from any field facing one of the four main directions (up, down, left, and right). His lawn mower can only go forwards (to the adjacent field facing the current direction) or make a 90 degree turn. Additionally, because of his own safety, Mirko can only use the lawn mower on his land, so he cannot leave the matrix.
Since making the lawn mower turn isn’t simple, Mirko wants to mow the lawn with the minimal amount of turns. For each piece of land he saw so far, Mirko wants to know the minimal number of turns he can make so that the entire lawn is mowed. Help Mirko solve this problem.
输入输出格式
输入格式:
The first line of input contains the positive integer K (1 ≤ K ≤ 50 000), the number from the task.
Each of the following K lines contains two positive integers N and M (1 ≤ N, M ≤ 1 000 000), the numbers from the task.
输出格式:
For each piece of land Mirko saw so far, output in a separate line the minimal amount of turns he can take so that the entire lawn is mowed.
输入输出样例
2 1 10 10 1
0 0
3 1 1 3 3 3 4
0 4 4
2 5 8 6 4
8 6
说明
In test cases worth 50% of total points, Mirko will see only one piece of land. The dimensions of this piece of land will be smaller than 500.
Clarification? ?of? ?the? ?first? ?test? ?case:
The first piece of land can be mowed without making any turns if he starts from the field in the first column of the table, faced to the right and only going forwards. A similar idea applies for the second piece of land.
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<iomanip> #include<algorithm> #include<cmath> #include<queue> #include<stack> #include<set> #include<map> using namespace std; int main() { int n; cin>>n; for(int i=1;i<=n;++i) { int a,b; cin>>a>>b; if(a==1||b==1) { cout<<0<<endl; continue; } else { int js=1; int total=0; if(a>b) { while(a!=0&&b!=0) { if(js%2==0) a--; else b--; total++; js++; } } else { while(a!=0&&b!=0) { if(js%2==0) b--; else a--; total++; js++; } } cout<<total-1<<endl; } } return 0; }
因为没有障碍并且求最少转弯次数所以一次走完一整行或一整列就是最优解法。。。所以可以模拟为给行数或列数减一。。。
然后分析一下,画个图看一下发现当行数大于列数时先走一整行(即先给行数减一再给列数减一直至有一数为零)当行数小与列数时先走一整列(即先给列数减一再给行数减一直至有一数为零)。但上面这个代码会TLE!!
当我尝试着改成如下代码时,还是TLE!!
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<iomanip> #include<algorithm> #include<cmath> #include<queue> #include<stack> #include<set> #include<map> using namespace std; int main() { int n; cin>>n; for(int i=1;i<=n;++i) { int a,b; cin>>a>>b; if(a==1||b==1) { cout<<0<<endl; continue; } else { int total=0; if(a>b) { while(a!=0&&b!=0) { a--; if(a==0) { total+=1; break; } b--; if(b==0) { total-=1; } total+=2; } } else { while(a!=0&&b!=0) { b--; if(b==0) { total+=1; break; } a--; if(a==0) { total-=1; } total+=2; } } cout<<total-1<<endl; } } return 0; }
两个的耗时好像没啥区别。。。(真是太失败了,然后我去翻了一下题解。***竟然这么简单,竟然有公式!!!)
AC代码:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<iomanip> #include<algorithm> #include<cmath> #include<queue> #include<stack> #include<set> #include<map> using namespace std; int main() { int n; cin>>n; for(int i=1;i<=n;++i) { int a,b; cin>>a>>b; cout<<2*min(a,b)-2<<endl;//公式 } return 0; }
原文链接:https://www.cnblogs.com/poi-bolg-poi/p/10752088.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:GoogleTest初探(1)
下一篇:洛谷P4057
- 洛谷P1164->小A点菜 2020-05-18
- 加边的无向图--并查集 2020-04-10
- 洛谷P1907口算练习题 2020-03-24
- 结题报告--P5551洛谷--Chino的树学 2020-03-13
- 结题报告--洛谷P3915 2020-03-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash