ACM-10月26驲周四周中训练心得
来源:互联网 发布:linux vi移到行尾 编辑:程序博客网 时间:2024/06/05 14:32
昨天做了一次训练赛,是一个人单打果然感觉思路上会少了些什么,没有和他们交流,自己一个人的思路还是太单一,其他的不多说,对昨天的比赛进行一下复盘,先做的是第一道题,题目的大致意思是小熊维尼要去兔子老鹰屹耳家做客吃东西,维尼非常贪吃要吃n顿,一开始在兔子家吃,然后其他朋友家里拜访吃东西,兔子和老鹰家之间的距离是a老鹰和屹耳家之间的距离是b,屹耳和兔子家之间的距离是c,维尼又比较懒,求维尼需要的最短路程,每次到其他朋友家里原来朋友家里立马就会刷新食物(不科学也没有办法),看到这道题我一开始想到的可能是一个最短路径的题目,也许可以用弗洛伊德这种简单粗暴地算法,后来发现可以有更简单的算法,如果n=1,直接输出0就可以了,如果n大于0,可以先找到三个朋友家之间最短的距离,之后只要一直不断的往返就是最短的距离了,为了达到最短的两个朋友家之间,最多要走一段不是最短的距离。用简单的运算就能解决,主要是一个过程。
#include<iostream>#include<cmath>using namespace std;int n,a,b,c;int main(){ cin>>n>>a>>b>>c; if(n==1) { cout<<0;return 0; } int len=min(a,min(b,c)),ans; if(len==a||len==b)ans=len*(n-1); else ans=min(a,b)+(n-2)*len; cout<<ans<<endl; return 0;}然后做的第三题这道题大致的意思是先输入一个x然后找一个数n,这个数n再加上这个数的每一位的和就是x然后去寻找这个n,一开始我想的是二分查找法,然后试了一下对于数据还是太大,最后发现由于数字的位数最多100位,每一位的算也能做。
for(int i=100;i>=0;i--){ if(n-i<=0) continue; LL p = n-i,sum = n-i; while(p) { sum+=p%10; p/=10; } if(sum==n) a[k++]=n-i; } printf("%lld\n",k); for(int i=0;i<k;i++) printf("%lld\n",a[i]); return 0;
阅读全文
0 0
- ACM-10月26驲周四周中训练心得
- ACM-10月19日周四周中训练心得
- ACM-8月31号周四周中训练心得
- ACM-9月7日周四周中训练心得
- ACM-9月14日周四周中训练心得
- ACM-9月21日周四周中训练心得
- ACM-9月28日周四周中训练心得
- ACM-11月2日周四周中训练心得
- ACM-11月9日周四周中训练心得
- ACM-11月16日周四周中训练心得
- ACM-11月23日周四周中训练心得
- ACM-11月30日周四周中训练心得
- ACM-12月7日周四周中训练心得
- ACM-10月12日周四周中训练日记
- 10月19日周四训练笔记
- ACM-11月26日周日周末训练心得
- ACM-9月10日周末训练心得
- ACM-10月1日周日周末训练心得
- 627.SWAP Salary
- jsp一些知识点
- Leetcode算法学习日志-54 Spiral Matrix
- 在MAC上安装gnuplot
- gesture--Android手势的使用
- ACM-10月26驲周四周中训练心得
- 51nod 1204 Parity[并查集]
- R
- 递归的概念,阶乘, 斐波那契列数:
- Linux网络编程——tcp并发服务器(多线程)
- 解决yum下载时报错的简单方法
- 有没有大神能够逐行解释一下代码?Delphi
- 网页使用ie或者360打开时按F12出现程序停止运行异常的原因以及解决方案
- maven的基本命令