您的位置:首页 > 其它

POJ-3672-Long Distance Racing-水题、%c输入要去除换行

2011-03-06 21:25 330 查看
没想到这道题自己贡献了4次TLE和1次的CE。

分析了下原因,自己本想先用函数计算出总时间,但这会导致很多次的重复计算,效率超低。

低效率代码:

#include <stdio.h>

#define MAX_T 100002
char cvec[MAX_T];
int m, t, u, f, d;

int get_total_time(int n_units) {
    int total_time = 0;
    for(int i = 0; i < n_units; i++) {
        switch(cvec[i]) {
            case 'u':
            case 'd':
                total_time += (u + d);
                break;
            case 'f':
                total_time += 2 * f;
                break;
            default:
                break;
        }
    }

    return total_time;
}

int main()
{
    scanf("%d%d%d%d%d", &m, &t, &u, &f, &d);
    char c_temp;
    for(int i = 0; i < t; i++) {
        scanf("/n%c", &c_temp);
        cvec[i] = c_temp;
    }

    int n_units = 1;
    int total_time;
    while(1) {
        total_time = get_total_time(n_units);
        if(total_time < m) {
            n_units++;
        } else if(total_time == m) {
            break;
        } else {
            n_units--;
            break;
        }
    }

    printf("%d/n", n_units);

    return 0;
}


修改后AC的代码:

#include <stdio.h>

#define MAX_T 100002

int main()
{
    char cvec[MAX_T];
    int m, t, u, f, d;

    scanf("%d%d%d%d%d", &m, &t, &u, &f, &d);
    for(int i = 0; i < t; i++)
        scanf("/n%c", &cvec[i]); //用scanf的%c输入char时,记得去除前面的/n和空格

    int total_time = 0;
    int n_units = 0;
    for(; total_time < m; n_units++) {
        if(cvec[n_units] == 'u' || cvec[n_units] == 'd') {
            total_time += (u + d);
        } else {
            total_time += (f + f);
        }
    }

    if(total_time > m)
        n_units--;

    printf("%d/n", n_units);

    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: