码迷,mamicode.com
首页 > 其他好文 > 详细

hdu5417公式法

时间:2015-08-26 17:13:22      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

BCdiv2#52 1001

题意太坑了,我以为每次还要计算machine关闭之后满足w值的各种取余运算,每次还要更新,想起来都觉得头皮发麻,结果久直接弃了BC,打不下去了。

结果刚刚补题的时候发现clarification中有关于1001样例的解析,才知道在关闭的瞬间是允许弹出球,而不是会弹出球。表示理解错误,简直了。

余下的就是对于数学方面的计算的理解了。自己的数学弱爆了。。。。全是坑啊

公式在代码里面,对于我来说真心难想啊。。。。

我觉得一定要注意tt代表的意义,不然绝对是坑

技术分享
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 
 6 using namespace std;
 7 int x,y,w,n,num,res,tt,ss; 
 8 
 9 int main()
10 {
11     while(cin>>x>>y>>w>>n){
12         if(x<w){
13             res=(n-1)*(x+y);
14         }
15         else{
16             num=1+x/w;//x时间内可以弹出num个球
17             tt=n%num;//tt=0则表示ss个x的时间足够弹出n个球,但是可能有剩余 ;
18             //tt!=0则表示ss个x的时间之外需要加上tt—1个w的时间 
19             ss=n/num;//需要几个x长的时间 
20             //cout<<"num"<<num<<"ss"<<ss<<"tt"<<tt<<endl;
21             if(tt!=0)
22                 res=ss*(x+y)+(tt-1+num)%num*w;
23             else 
24                 res=(ss-1)*(x+y)+(tt-1+num)%num*w;//
25         }
26         cout<<res<<endl;
27     }
28     return 0;
29 }
View Code

 被某某的代码惊呆了。。。。类似的解题方法,但是完全不同的写法

技术分享
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 
 6 using namespace std;
 7 
 8 int main()
 9 {
10     int x,y,w,n,res=0,tmp,mul,ans=0; 
11     while(cin>>x>>y>>w>>n){
12         tmp=x/w+1;//x时间弹出球的个数 
13         //cout<<tmp<<" ";
14         mul=(n-1)/tmp;//多少次X时间 
15         //cout<<mul<<" ";
16         ans=(x+y)*mul;//ans初始化 
17         //cout<<ans<<" ";
18         n-=mul*tmp;//n值更新 
19         //cout<<n<<endl;
20         n--;
21         while(n--){
22             ans+=w;
23         }
24         cout<<ans<<endl;
25     }
26     return 0;
27 }
View Code

网搜的另一种模拟的写法

技术分享
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <queue>
 7 #include <stack>
 8 #include <set>
 9 #include <map>
10 #include <string>
11 #include <math.h>
12 #include <stdlib.h>
13 #include <time.h>
14 using namespace std;
15 int main()
16 {
17         int x,y,w,n,ans,i,tp;
18     while(~scanf("%d%d%d%d",&x,&y,&w,&n))
19     {
20         i=1;
21         ans=tp=0;
22         while(i<n)
23         {
24             if(ans+w<tp+x)
25             {
26             ans+=w;
27             i++;
28             }
29             else if(ans+w==tp+x)
30             {
31                 i++;
32                 tp+=x;
33                 ans=tp;
34                 if(i==n) break;
35                 i++;
36                 tp+=y;
37                 ans=tp;
38             }
39             else if(ans+w>tp+x)
40             {
41                 i++;
42                 tp=tp+x+y;
43                 ans=tp;
44             }
45         }
46         printf("%d\n",ans);
47     }
48     return 0;
49 }
View Code

 头一次敲模拟,简直哭死,好在自己AC了

技术分享
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 
 6 using namespace std;
 7 
 8 int main()
 9 {
10     int x,y,w,n,tmp,mul,ans=0; 
11     while(cin>>x>>y>>w>>n){
12         int res=0;
13             if(w>x){
14                 res=(n-1)*(x+y);
15             }
16             else if(w==x){
17                 while(n!=0){
18                     n--;
19                     //cout<<"n"<<n<<endl<<res<<endl;
20                     if(n>1)
21                     {
22                         res+=w+y;
23                         n--; 
24                     }
25                     else if(n==1)
26                     {
27                         res+=w;
28                         n--;
29                     }//cout<<"res"<<res<<endl;
30                 }
31             }
32             else {
33                 while(n!=0)
34                 {
35                     n--;
36                     int ans=0;
37                     while(ans+w<=x&&n!=0){
38                         ans+=w;
39                         n--;
40                         //cout<<"ans"<<ans<<endl;
41                     }
42                     if(n!=0)
43                     {
44                         res+=x+y;
45                     }
46                     else res+=ans;
47                     //cout<<"res"<<res;
48                 }
49             }
50         cout<<res<<endl;
51     }
52     return 0;
53 }
View Code

 

hdu5417公式法

标签:

原文地址:http://www.cnblogs.com/sunshiniing/p/4760675.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!