POJ-3672-Long Distance Racing-水题、%c输入要去除换行
2011-03-06 21:25
330 查看
没想到这道题自己贡献了4次TLE和1次的CE。
分析了下原因,自己本想先用函数计算出总时间,但这会导致很多次的重复计算,效率超低。
低效率代码:
修改后AC的代码:
分析了下原因,自己本想先用函数计算出总时间,但这会导致很多次的重复计算,效率超低。
低效率代码:
#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; }
相关文章推荐
- poj 3672 Long Distance Racing(水题)
- POJ 3672 Long Distance Racing
- poj 3672 Long Distance Racing
- POJ 3672 Long Distance Racing(水~)
- poj 3672 Long Distance Racing
- (Relax ST1.29)POJ 3672 Long Distance Racing(来回路问题..)
- POJ 3672 Long Distance Racing G++
- POJ 3672 Long Distance Racing (模拟)
- poj 3672 Long Distance Racing
- poj 3672 Long Distance Racing
- POJ 3672 水题......
- POJ 3672 水题......
- poj3672 Long Distance Racing留念下,惨痛的教训
- U - Long Distance Racing
- U - Long Distance Racing
- POJ 2028 When Can We Meet?(我的水题之路——边输入,边搜索)
- Long Distance Racing
- I - Long Distance Racing(第二季水)
- U - Long Distance Racing
- POJ 2602 Superlong sums (高精度,模拟,水题)