#include <bits/stdc++.h>
using namespace std ;
int Calculate(int , int , int , int , int , int ) ;
int turn(int) ;
int arr[111111][2] ;
int main(){
int n , r , y , g ;
cin >> r >> y >> g ;
cin >> n ;
for (int i = 0 ; i < n ; i++) {
for (int j = 0; j < 2 ; j++) {
cin >> arr[i][j] ;
}
}
int sum = 0 ;
for (int i = 0; i < n ; i++) {
if (arr[i][0] == 0){
sum += arr[i][1] ;
}else {
sum = Calculate(arr[i][1] , sum , arr[i][0] , r , y , g ) ;
}
}
cout << sum ;
return 0 ;
}
int Calculate(int count , int sum , int value ,int r , int y , int g){
int t = sum - count ;
int flag ;
if(value == 1){
flag = 0 ;
}else if(value == 2) {
flag = 1 ;
}else {
flag = 2 ;
}
if(t > 0){
flag = turn(flag) ;
while(t > 0) {
if (t > r && flag == 0) {
t -= r ;
flag = 2;
} else if (t > y && flag == 1) {
t -= y;
flag = 0;
} else if (t > g && flag == 2) {
t -= g ;
flag = 1;
} else {
if(flag == 0){
sum = sum + r - t ;
}else if(flag == 1){
sum = sum + r + y - t ;
}
break ;
}
}
}else{
if(flag == 0){
sum += abs(t) ;
}else if(flag == 1){
sum += abs(t) + r ;
}
}
return sum ;
}
// 0:红灯 1:黄灯 2:绿灯
int turn(int flag){
if (flag == 0){
flag = 2 ;
}else if(flag == 1){
flag = 0 ;
}else if(flag == 2){
flag = 1 ;
}
return flag ;
}
大佬们,CCF小明放学这道题我写的这个代码为什么只能得60分在n<=10五次方时就发生错误了呢?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- threenewbee 2019-10-12 09:01关注
题目是什么,int arr[111111][2] ; 这里限制了最大大小。看下 sum 有没有溢出,算法有没有超时
解决 无用评论 打赏 举报
悬赏问题
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
- ¥15 lammps拉伸应力应变曲线分析
- ¥15 C++ 头文件/宏冲突问题解决
- ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
- ¥50 安卓adb backup备份子用户应用数据失败
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛
- ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
- ¥30 python代码,帮调试,帮帮忙吧
- ¥15 #MATLAB仿真#车辆换道路径规划
- ¥15 java 操作 elasticsearch 8.1 实现 索引的重建