玩游戏的时候怎么没觉得补刀这么难…

玩游戏的时候怎么没觉得补刀这么难。。。。。。

玩游戏的时候怎么没觉得补刀这么难。。。。。。

改了好几天,本地可以用了,但是学校的OJ说我运行超时T^T
算法还要怎么优化啊,求大神T^T

001  #include
002 
003  using  namespace  std;
004 
005  class  basetemp{
006  public:
007           int  N;
008           int  **atkerX;
009           int  killer;
010           int  HP;
011 };
012 
013  bool  check(basetemp  In){
014       int  i;
015       if  (In.killer<<span style="color: rgb(0, 153, 153);">1||In.killer> 100000||In.HP<<span style="color: rgb(0, 153, 153);">1||In.HP> 1000000 return  1;
016       for  (i= 0;i<(In.N- 1);i++){
017           if  (In.atkerX[i][ 0]<<span style="color: rgb(0, 153, 153);">1||In.atkerX[i][ 0]> 10||In.atkerX[i][ 1]<<span style="color: rgb(0, 153, 153);">1||In.atkerX[i][ 1]> 100
018           return  1;
019       }
020       return  0;
021 }
022 
023  int  calcultion(basetemp  In){
024       if  (check(In)) 
025       {
026           cout<< "Impossible";
027           return  - 1;
028       }
029       int  time= 1;
030       int  i,j;
031       int  mintime,maxtime;
032       int  restHP=In.HP;
033       int  killatk= 0;
034       int  counter= 0;
035       //求mintime
036       do{
037           for(i= 0;i<(In.N- 1);i++){
038               if  time  In.atkerX[i][ 1==  0  ){
039                   restHP=restHP  In.atkerX[i][ 0];
040                   if  (restHP  <=  In.killer){
041                       killatk=In.atkerX[i][ 0];
042                       for(j= 1;j<(In.N- 1);j++){
043                           if  (time  In.atkerX[j][ 1==  0  &&  killatk 0]){
044                               killatk=In.atkerX[j][ 0];
045                               break;
046                           }
047                       }
048                       break;
049                   }
050               }
051           }
052           time++;
053       } while  (restHP  In.killer);
054       if  (In.killer>=killatk)  mintime  time  1;
055       else{
056           mintime  - 1;
057           cout<< "Impossible";
058           return  - 1;
059       }
060       //求maxtime
061       restHP= 0;
062       for(i= 0;i<(In.N- 1);i++){
063           restHP+=In.atkerX[i][ 0]*((mintime- 1)/In.atkerX[i][ 1]);
064       }
065       restHP=In.HP-restHP;
066       time=mintime;
067       do{
068           for(i= 0;i<(In.N- 1);i++){
069               if  (time%In.atkerX[i][ 1]== 0){
070                   restHP=restHP-In.atkerX[i][ 0];
071                   if  (restHP<= 0){
072                       killatk=In.atkerX[i][ 0];
073                       for(j= 1;j<(In.N- 1);j++){
074                           if  (time%In.atkerX[j][ 1]== 0&&killatk 0]){
075                               killatk=In.atkerX[j][ 0];
076                               break;
077                           }
078                       }
079                       break;
080                   }
081                          
082           }
083           time++;
084       } while  (restHP> 0);
085       if  (In.killer>=killatk)  maxtime=time- 1;
086       else  maxtime=time- 2;
087       cout<<mintime<< " "<<maxtime;
088       return  0;
089 }
090 
091  int  main(){
092       int  i,j,k= 0;
093       basetemp  temp[ 1000];
094       while( 1){
095           cin>>temp[k].N;
096           temp[k].atkerX= new  int*[temp[k].N];
097           for( int  0;i  <=  temp[k].N- 1;i++){
098               temp[k].atkerX[i]= new  int[ 2];
099           }
100           if  (temp[k].N== 0 break
101           for  (i= 0;i 1;i++){
102               for(j= 0;j<<span style="color: rgb(0, 153, 153);">2;j++){
103                   cin>>temp[k].atkerX[i][j]; 
104               }
105           }
106           cin>>temp[k].killer>>temp[k].HP;
107           k++;
108       }
109       for(i= 0;i
110           calcultion(temp[i]);
111           cout<<endl;
112       }
113       return  0;
114 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值