Codeforces 864 C Bus 思维
Posted FriskyPuppy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 864 C Bus 思维相关的知识,希望对你有一定的参考价值。
题目链接: http://codeforces.com/problemset/problem/864/C
题目描述: 输入a, b, f, k , 一段长度为a的路来回走, 中间f的地方有一个加油站, 油罐的容量为b, 问想要走b次这条路至少需要加多少次油
解题思路: 由于K <= 1e4, 所以将每次需要走路的连续序列构造出来再去遍历一遍这个序列看啥时候需要加油就可以了
代码:
#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掉,妈的智障
以上是关于Codeforces 864 C Bus 思维的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round 864 (Div. 2) C和D