题意太坑了,我以为每次还要计算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 }
被某某的代码惊呆了。。。。类似的解题方法,但是完全不同的写法
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 }
网搜的另一种模拟的写法
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 }
头一次敲模拟,简直哭死,好在自己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 }
时间: 2024-10-13 20:58:48