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

优化ACM编程题解法
本文分享了一道ACM编程题的解答过程,通过对比低效与高效代码,总结出减少重复计算的重要性。介绍了如何避免不必要的计算以提高程序运行效率。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值