初见 2019-10-11 22:47 采纳率: 0%
浏览 217

大佬们,CCF小明放学这道题我写的这个代码为什么只能得60分在n<=10五次方时就发生错误了呢?

#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 ;
}
  • 写回答

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 实现 索引的重建