一本通上数据测试点比较简单,很容易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 题解相关推荐

  1. 铲雪车(snow) UVA10203 Snow Clearing 题解 优化版

    - 思路和解析,参见第一版题解: 铲雪车题解 洛谷链接 铲雪车 题解 第一版 这里是只是做了输入优化,优化如下: 1.直接使用scanf函数输入,避免了字符转数字. 2.免去了空格数量检测,直接在数字 ...

  2. 信息学奥赛一本通 1374:铲雪车(snow)

    [题目链接] ybt 1374:铲雪车(snow) 洛谷 UVA10203 Snow Clearing 注:原题输入要求更复杂,本文代码无法通过. [题目考点] 1. 图论:欧拉回路 2. 两点间距离 ...

  3. Producing Snow

    题解:这道题暴力可以出答案,但是会tle tle代码: #include <iostream>using namespace std; const int maxn = 1e5 + 10; ...

  4. R语言并行计算snow包文档(beta)

    1.snow-clusterCluster-Level on a snow cluster snow-clusterCluster-Level on a snow cluster clusterSpl ...

  5. R语言snow包并行计算

    This post was kindly contributed by 数据科学与R语言 - go there to comment and to read the full post. 在数据挖掘和 ...

  6. R语言并行运算(snow包)

    snow包 snow包主要运行于传统的集群计算.它主要用于蒙特卡洛模拟(Monte Carlo simulations),boostrapping,交叉验证(cross validation),集成机 ...

  7. 0x15.基本数据结构 — 字符串 (KMP算法(含详细证明)和最小表示法)

    目录 一.KMP模式匹配 1.引理: 2.引理证明: 3.使用优化的算法计算nextnextnext数组: 4.luogu P3375 [模板]KMP字符串匹配 5.UVA1328 Period 6. ...

  8. 基本数据结构篇(三万字总结)

    数据结构 栈 编辑器(对顶栈) 火车进栈 火车进栈问题(卡特兰数) 大数相乘 分解质因数 阶乘分解质因数 压位 配套的高精度除法 队列 小组队列 蚯蚓 双端队列 最大子序和(单调队列) 哈希 雪花雪花 ...

  9. 铁路工程词汇-中英对照

    铁路专用英语 专业词汇中英对照翻译----铁路工程词汇 线路工程 railway line engineering 铁路勘测 ;铁道勘测 railway reconnaissance 铁路选线 ;铁道 ...

  10. 天气预报的英语表达方式

    天气预报的英语表达方式: sunny晴天 cloudy多云 overcast阴天 light rain 小雨  moderate rain 中雨heavy rain 大雨 moderate snow中 ...

最新文章

  1. Spring是如何运用设计模式的?
  2. KWrite 和 Kate 在 Linux 上的应用
  3. lua打开是二进制代码_物联网的构建:使用Lua高级语言进行嵌入式开发
  4. NX界面中获取线、面、体、特征的tag值
  5. Angular.js 页面里的按钮点击事件处理
  6. 关于开发中的常用手段(个人建议)
  7. linux中项目部署和日志查看
  8. java二叉树是什么_java数据结构二叉树是什么?特点是?
  9. 用计算机探索规律概括,《用计算器探索规律》优秀教学设计
  10. Windows 驱动开发 之 WinDbg调试(一)
  11. vbs文件放在java工程中如何调用_VBS教程:在 VBScript 中使用对象
  12. 社区宽带繁忙是什么意思_沈阳附近长城宽带安装申请多少钱欢迎咨询_畅鹏城通讯...
  13. web个人学习笔记(待完善)
  14. 用js处理图片加载错误时加载默认图片的方法
  15. 【和小冉一起学习c++】踏入c++的大门~第一个c++程序
  16. Java-用类描述人之间的血缘关系
  17. 微软office服务器连接很慢,解决 RPC 请求处理速度慢的问题
  18. MemoryCache缓存
  19. 网络聊天室(Java)
  20. 程序里的国际时区和夏令时

热门文章

  1. Go语言(golang)的错误(error)处理的推荐方案
  2. Android应用内存管理机制
  3. 编程c语言黑与白,C语言黑与白问题代码及解析
  4. 树莓派linux led字符设备驱动( linux自带)
  5. 人在囧途——Java程序猿学习Python
  6. ITIL学习笔记——核心流程之:配置管理
  7. 任天堂(Nintendo)(什么是ps4,什么是ns(switch))
  8. Raspberry Pi树莓派分类和其相似产品介绍
  9. zabbix日志监控
  10. SUMX2MY2函数,你知道什么意思吗?