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

没想到这道题自己贡献了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; }

你可能感兴趣的:(c,distance)