Codeforces 864 C Bus 思维
题目链接: http://codeforces.com/problemset/problem/864/C
题目描述: 输入a, b, f, k , 一段长度为a的路来回走, 中间f的地方有一个加油站, 油罐的容量为b, 问想要走b次这条路至少需要加多少次油
解题思路: 由于K <= 1e4, 所以将每次需要走路的连续序列构造出来再去遍历一遍这个序列看啥时候需要加油就可以了
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> #include <cstdio> #include <map> #include <iterator> #include <string> using namespace std; const int maxn = 1e4+100; int dis[maxn]; int main() { int a, b, f, k; cin >> a >> b >> f >> k; int temp1 = f; int temp2 = a-f; temp1 *= 2, temp2 *= 2; dis[1] = f; int flag = 0; if( k & 1 ) flag = 1; if( flag == 1 ) { dis[k+1] = a-f; int temp = 1; for( int i = 2; i <= k; i++ ) { if( temp==1 ) { dis[i] = temp2; } else { dis[i] = temp1; } temp = -temp; } } else { dis[k+1] = f; int temp = 1; for( int i = 2; i <= k; i++ ) { if( temp==1 ) { dis[i] = temp2; } else { dis[i] = temp1; } temp = -temp; } } // for( int i = 1; i <= k+1; i++ ) { // cout << dis[i] << " "; // } // cout << endl; int ans = 0; flag = 0; int temp = 0; for( int i = 1; i <= k+1; i++ ) { if( dis[i] > b ) { flag = 1; break; } if( temp + dis[i] <= b ) { temp += dis[i]; } else { temp = dis[i]; ans ++; } } if( flag ) { cout << "-1" << endl; } else { cout << ans << endl; } return 0; }
思考: 自己首先一开始想当然的理解了题意, 造成的后果就是样例怎么也推不出来, 还以为是题错了就咸鱼了一个点儿........后来自己又重新把题画了一遍才发现是自己傻逼, 然后才A掉,妈的智障
posted on 2017-09-26 22:07 FriskyPuppy 阅读(143) 评论(0) 编辑 收藏 举报