铲雪车(snow) UVA10203 Snow Clearing 题解
一本通上数据测试点比较简单,很容易AC。
原版UVA上很麻烦,好久才AC。百度上搜不到原版题目的题解。洛谷上也没有人AC,更没有题解。
特地发布一下我的题解,供大家一起学习研究。
这是洛谷题解连接:
https://www.luogu.com.cn/problemnew/solution/UVA10203
以下是洛谷我发的题解原文。
这题很费时,都是细节问题。分享一下思路和代码,一起学习研究。
简单介绍一下思路:有数据的保证,一定构成欧拉回路后者欧拉路。从起始点出发,走一个欧拉路或者欧拉回路,然后沿着反方向返回,这样保证都在铲雪的路上。
数据输入很特别,不能使用常规的数值输入。原题给定数据组后面有一个空白行,每组数据之间也有一个空白行。如果用常规数值读入数据,会跨行读入,没有办法知道空白行的位置。所以这里采用字符串读入,读入空白行时,手工判断,读入结束符时,结果为NULL。然后再手动把串转换为数值即可。文件测试数据,输入最后一行不要加回车。
数据输出也很特别,原版英文题目明确要求,每行输出后要一个空白行,这个很容易被忽视。
我最后在这一组测试数据上没有通过,建议大家都测试一下,是不是问题也出在这里,很容易被忽视的细节:
20 00 0 10000 100005000 -10000 5000 100005000 10000 10000 100000 00 0 0 9950
观察后面一组测试数据,如果输出: 00:60,那就错了。
应该是: 1:00。这个细节让我费尽心思。
这里提交代码AC的代码:
/*因为可以U型掉头,所以沿着出发的路径相反的路,一定可以回到出发点。不需要空车前进 。 AC代码 */ #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; #define maxn 500 double ans=0;//ans:铲雪距离 char s[maxn]; int blank[4];//字符数组中,三个空格的位置 //从idx开始,把s中的字符转换为数字 bool first=true;//第一组结果 long long to_data(int idx){long long t=0;int flag=1;if(s[idx]=='-'){//负数flag=-1;idx++;}while(s[idx]>='0' && s[idx]<='9'){t=t*10+(s[idx]-'0');idx++;}return flag*t; } //计数s中的空格数 int blank_cnt(){int i=0,cnt=0;int blank_i=1;//空格的坐标位置 while(s[i]){if(s[i]==' '){cnt++;blank[blank_i++]=i;}i++;}return cnt; } //主功能 void resolve(){//双车道,距离乘以2ans*=2;ans/=1000;//单位变成千米 double time=0;//单位是小时 time=ans/20;long long hour=floor(time);long long minute=((time-hour)*60+0.5);//四舍五入后够60分钟,小时加1,分钟清零 if(minute==60){minute=0;hour++;}if(first){//第一组结果输出printf("%lld:%02lld\n",hour,minute); first=false;}else{//先输出一个空白行 printf("\n%lld:%02lld\n",hour,minute);}} int main(){ // freopen("1374.in","r",stdin); // freopen("1374.out","w",stdout);int t,cnt;long long x1,y1,x2,y2;bool first=true;//第一组数据 scanf("%d",&t);getchar();//消耗多余的回车键 getchar();//空白行的回车 while(true){//在UVA网站,gets已经废弃,不能使用。这里改用fgets。 //输入结束 if(fgets(s,maxn,stdin)==NULL)break;cnt=blank_cnt() ;//计算空格个数//开始坐标位置,说明开始一组新的数据输入。直到下一次cnt==1截止 if(cnt==1){//数据本身可以不需要,不作处理//一组数据开始 //数据初始化ans=0;}else if(cnt==3){//新的数据输入,分离出四个正数x1=to_data(0) ;y1=to_data(blank[1]+1);x2=to_data(blank[2]+1);y2=to_data(blank[3]+1);//计算顶点间的距离,这是铲雪必须的距离 ans+=sqrt(pow((x1-x2),2.0)+pow((y1-y2),2.0));}else{//空白行,一组数据结束,处理数据resolve();}}//处理最后一组数据输出resolve(); return 0; }
铲雪车(snow) UVA10203 Snow Clearing 题解相关推荐
- 铲雪车(snow) UVA10203 Snow Clearing 题解 优化版
- 思路和解析,参见第一版题解: 铲雪车题解 洛谷链接 铲雪车 题解 第一版 这里是只是做了输入优化,优化如下: 1.直接使用scanf函数输入,避免了字符转数字. 2.免去了空格数量检测,直接在数字 ...
- 信息学奥赛一本通 1374:铲雪车(snow)
[题目链接] ybt 1374:铲雪车(snow) 洛谷 UVA10203 Snow Clearing 注:原题输入要求更复杂,本文代码无法通过. [题目考点] 1. 图论:欧拉回路 2. 两点间距离 ...
- Producing Snow
题解:这道题暴力可以出答案,但是会tle tle代码: #include <iostream>using namespace std; const int maxn = 1e5 + 10; ...
- R语言并行计算snow包文档(beta)
1.snow-clusterCluster-Level on a snow cluster snow-clusterCluster-Level on a snow cluster clusterSpl ...
- R语言snow包并行计算
This post was kindly contributed by 数据科学与R语言 - go there to comment and to read the full post. 在数据挖掘和 ...
- R语言并行运算(snow包)
snow包 snow包主要运行于传统的集群计算.它主要用于蒙特卡洛模拟(Monte Carlo simulations),boostrapping,交叉验证(cross validation),集成机 ...
- 0x15.基本数据结构 — 字符串 (KMP算法(含详细证明)和最小表示法)
目录 一.KMP模式匹配 1.引理: 2.引理证明: 3.使用优化的算法计算nextnextnext数组: 4.luogu P3375 [模板]KMP字符串匹配 5.UVA1328 Period 6. ...
- 基本数据结构篇(三万字总结)
数据结构 栈 编辑器(对顶栈) 火车进栈 火车进栈问题(卡特兰数) 大数相乘 分解质因数 阶乘分解质因数 压位 配套的高精度除法 队列 小组队列 蚯蚓 双端队列 最大子序和(单调队列) 哈希 雪花雪花 ...
- 铁路工程词汇-中英对照
铁路专用英语 专业词汇中英对照翻译----铁路工程词汇 线路工程 railway line engineering 铁路勘测 ;铁道勘测 railway reconnaissance 铁路选线 ;铁道 ...
- 天气预报的英语表达方式
天气预报的英语表达方式: sunny晴天 cloudy多云 overcast阴天 light rain 小雨 moderate rain 中雨heavy rain 大雨 moderate snow中 ...
最新文章
- Spring是如何运用设计模式的?
- KWrite 和 Kate 在 Linux 上的应用
- lua打开是二进制代码_物联网的构建:使用Lua高级语言进行嵌入式开发
- NX界面中获取线、面、体、特征的tag值
- Angular.js 页面里的按钮点击事件处理
- 关于开发中的常用手段(个人建议)
- linux中项目部署和日志查看
- java二叉树是什么_java数据结构二叉树是什么?特点是?
- 用计算机探索规律概括,《用计算器探索规律》优秀教学设计
- Windows 驱动开发 之 WinDbg调试(一)
- vbs文件放在java工程中如何调用_VBS教程:在 VBScript 中使用对象
- 社区宽带繁忙是什么意思_沈阳附近长城宽带安装申请多少钱欢迎咨询_畅鹏城通讯...
- web个人学习笔记(待完善)
- 用js处理图片加载错误时加载默认图片的方法
- 【和小冉一起学习c++】踏入c++的大门~第一个c++程序
- Java-用类描述人之间的血缘关系
- 微软office服务器连接很慢,解决 RPC 请求处理速度慢的问题
- MemoryCache缓存
- 网络聊天室(Java)
- 程序里的国际时区和夏令时