首页 > 其他 > 详细

CCF-小明放学

时间:2020-09-11 16:16:03      阅读:32      评论:0      收藏:0      [点我收藏+]

。。。为什么50分。。啊暂时不想改了 换别人的思路吧

#include<bits/stdc++.h>
using namespace std;

int r,y,g;
int n;


int change1(int sign,int number){
     if(sign==1){
           return number;
     }else if(sign==2){
         return number+r;
     }else{
        return 0;
     }
}
//红绿灯颜色变化是 红绿黄  但是sign按顺序是红黄绿!!!!!!!!!!!!!
int change2(long long sum,int sign,int number){//参数类型
     int remain = 0;

     if(sign==1){//原本是红灯
         if(number+g > sum){ //过来的时候 在本轮绿灯
            sum = sum;
            return sum;
         }else if(number+y+g>sum){//过来的时候 在本轮黄灯
            sum += y-(sum-number-g);
            return sum;
         }else{//时间超出较多 已过本轮红绿黄
            remain = sum-number-y-g;
         }
     }else if(sign==3){//原本是绿灯
        if(number+y>sum){//过来的时候 在本轮黄灯
            sum += y-(sum-number);
            return sum;
        }else{//时间超出较多 已过本轮绿黄
            remain = sum-number-y;
        }
     }else{//原本是黄灯
           remain = sum - number;
     }

      //其他轮开始
      int complete = r+g+y;
      int still = remain%complete;
      if(still>=0 && still<r){//
              sum += (r-still);
      }else if(still>=r && still<r+g){//绿
              sum = sum;
      }else if(still>=r+g && still<r+g+y){//
              sum += (y-(still-r-g))+r;
      }


        return sum;

}
int main(){


     cin>>r>>y>>g;
     cin>>n;
     int data[n][2];
     long long sum = 0;
     for(int i=0;i<n;i++){
        cin>>data[i][0]>>data[i][1];
     }
    //
    for(int i=0;i<n;i++){
        if(data[i][0]==0){
            sum += data[i][1];
        }else{
            if(sum < data[i][1]){
                sum += change1(data[i][0],data[i][1]);
            }else{ //换灯
                 sum = change2(sum,data[i][0],data[i][1]);
            }

        }
    }

     cout<<sum<<endl;

     return 0;
}
//https://blog.csdn.net/happywlg123/article/details/87864575
//其实是和我不太一样的思路 他是不分本轮还是其他论 到了路口直接取模运算 认为从到了路口那个节点开始算起再到那个节点 算一圈
//我的是从红灯开始的那一秒 算一个轮回 所以我的要分的情况更多一些
//50啊到底哪里错了   sum要用long long类型的传参的时候也是这样

 

CCF-小明放学

原文:https://www.cnblogs.com/yundong333/p/13650899.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!