hdu 2073:无限的路(思维)

快来打我* 2023-06-09 10:06 90阅读 0赞

hdu 2073:无限的路(思维)

题目链接

开始想着用个前缀,然后后面直接调用即可,但是由于实力有限,没能搞出来,后面就想着干脆暴力模拟,结果交一发TLE。。。。。

于是就开始看大佬们的博客了

https://blog.csdn.net/yangyafeiac/article/details/7828435

居然又是一道思维题,感觉还是比较难想到,其实我觉得前缀其实可以的,但是就是没弄出来

20191020004237584.png

有点迷…

AC代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<cmath>
  6. using namespace std;
  7. double fx(int x,int y){
  8. double ans=0.0;
  9. double m=sqrt(2.0);
  10. int n=x+y;
  11. for(int i=1;i<n;i++){
  12. ans+=i*m*1.0;
  13. }
  14. ans+=x*m; //这里重点注意
  15. for(int i=0;i<n;i++)
  16. ans+=sqrt(i*i*1.0+(i+1)*(i+1)*1.0);
  17. return ans;
  18. }
  19. int main(){
  20. int t;
  21. int x1,y1,x2,y2;
  22. scanf("%d",&t);
  23. while(t--){
  24. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  25. printf("%.3f\n",fabs(fx(x1,y1)-fx(x2,y2)));
  26. }
  27. return 0;
  28. }

TLE代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<cmath>
  6. #define ll long long
  7. using namespace std;
  8. int main(){
  9. int k;
  10. int x1,y1,x2,y2;
  11. scanf("%d",&k);
  12. while(k--){
  13. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  14. if((x1+y1)>=(x2+y2)){
  15. int t=x1;
  16. x1=x2;
  17. x2=t;
  18. t=y1;
  19. y1=y2;
  20. y2=t;
  21. }
  22. int i=x1,j=y1;
  23. double sum=0.0;
  24. while(!(i==x2&&j==y2)){
  25. if(i==0&&j==0){
  26. sum+=1.0;
  27. j++;
  28. }
  29. else if(j==0){
  30. sum+=sqrt(i*i*1.0+(i+1)*(i+1)*1.0);
  31. j=i+1;
  32. i=0;
  33. }
  34. else{
  35. sum+=sqrt(2.0);
  36. i++;
  37. j--;
  38. }
  39. }
  40. printf("%.3f\n",sum);
  41. }
  42. return 0;
  43. }

发表评论

表情:
评论列表 (有 0 条评论,90人围观)

还没有评论,来说两句吧...

相关阅读

    相关 思维模型学习之

    如何培养优秀的思维模型 掌握思维模型:成功学习的关键 提升思维模型能力的方法与技巧 打造强大的思维模型:实现目标的捷径 开启思维模型学习之路:步步高升

    相关 HDU 6370(思维)

    [传送门][Link 1] 思路:因为狼说什么都是可以的,所以全是狼是可以,村民为0。 那问题就是转化成求铁狼的数量。我们对村民边建图,我们发现,一个连通分量要么是个基环树