有一个环形跑道,上面有n个加油站,到i号加油站可以加pi的油,跑到下一站要花费qi的油,起点任意选,问是否有一个起点可跑完整个跑道. 从i开始跑,如果遇到某个站j不能跑了,那么从i到j之间的站开始跑,到j的油不会增加,所以下次直接从j+1开始跑.复杂度是O(n) #include<bits/stdc++.h> using namespace std; #define bug(x) cout<<#x<<'='<<x<<endl; ; int p[m…
题意:环形跑道上有n(n <= 100000)个加油站,编号为1~n.第i个加油站可以加油pi加仑.从加油站i开到下一站需要qi加仑汽油.你可以选择一个加油站作为起点,起始油箱为空(但可以立即加油).你的任务是选择一个起点,使得可以走完一圈后回到起点.假定油箱中的油量没有上限.如果无解,输出Not possible,否则输出可以作为起点的最小加油站编号. 分析:如果从加油站st开始,一直到加油站id油没了,说明id之前的加油站都不可以作为起点.枚举并验证所有起点即可. #pragma comme…
从第一个加油站开始枚举起点,如果到第i个加油站油量不够的话,那么1~i个加油站都不可能是起点. 将第i+1个加油站作为起点继续枚举. 比如说,第一个加油站开始最多跑到第5个加油站,那么第二个加油站不可能是起点. 因为第一个作为起点的话,到达第二个加油站油箱可能还有剩余,这样都跑不完一圈,所以从第二个站开始跑也就不可能跑完一圈. #include <cstdio> + ; ], q[maxn * ]; int main() { freopen("in.txt", "…
https://vjudge.net/problem/UVA-11093 题意:环形跑道上有n个加油站,编号为1~n.第i个加油站可以加油pi加仑,从加油站i开到下一站需要qi加仑汽油.输出最小的起点,使得可以走完一圈后回到起点. 思路:直接枚举.注意剪枝就可以了,如从1号加油站出发,开到加油站p前没油了,那么2,3,4...p-1肯定不是解. #include<iostream> using namespace std; + ; int n; int ans; int p[maxn]; in…
题意:环形跑道上有N个加油站,编号为1~N.第 i 个加油站可以加油Ai加仑,从加油站 i 开到下一站需要Bi加仑汽油.问可作为起点走完一圈后回到起点的最小加油站编号. 解法:我们把每个加油站的Ai,Bi合并,把Ai-Bi看成N个点的权Ci,表示经过 i 的剩余油量.可知可通过第 i 个加油站就是sum{}+Ci>=0,sum{}表示从起点开到 i 之前剩余的油量,sum{}>=0.因此,若sum{}+Ci<0,那么从这时枚举的起点到 i 之间的所有点都不能作为起点,因为这时的sum{}…
Just Finish it up Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Submit]   [Go Back]   [Status] Description   I I U P C 2 0 0 6 Problem J: Just Finish it up Input: standard input Output: standard output Along a circular tr…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 尺取法. 假设现在取[l..r]这一段. 然后发现累加的和小于0了. 那么方法只能是不走l..l+1这一段了 即delta递减(p[l]-q[l]); 直到delta>=0为止. 某个时刻如果发现r+1==l 或者l==1且r==n 则合法. 如果发现l大于n了.则返回无解 [代码] #include <bits/stdc++.h> #define ll long long using namespace std; co…
这道题发现一个性质就解决了 如果以i为起点, 然后一直加油耗油, 到p这个地方要去p+1的时候没油了, 那么i, i+1, --一直到p, 如果以这些点 为起点, 肯定也走不完. 为什么呢? 用反证法, 假设以q(i  < q <= p)这个点为起点可以走完的话, 那么i这个点也一定可以走完 首先, i是可以达到q的, 因为i可以达到p, 而q是在p前面的, 而且从i开始走到q这个点剩下的油量肯定大于等于0, 而如果单纯从q开始走的话, 油量会等于0, 也就是说从i过来所有的油量反而会更多,…
双向约瑟夫环. 数据规模只有20,模拟掉了.(其实公式我还是不太会推,有空得看看) 值得注意的是两个方向找值不是找到一个去掉一个,而是找到后同时去掉. 还有输出也很坑爹! 在这里不得不抱怨下Uva的oj,少了个s,少了个空行什么的都不会显示pe,就给个wa,让人还以为算法有问题.原本以为Uva没有pe,然后据说这边的输出空行如果不对的话就会显示pe... 代码: #include <cstdio> #include <cstring> const int maxn = 22; in…
互斥锁mutex变量的值非0即1,只能用来表示两种状态下的临界资源.而信号量是与之类似的,用来表示可用资源的,区别在于,信号量可以表示多个可用资源的. --值为2的信号量也就是特殊的互斥锁了. 那么下边就简单实现信号量表示多个资源访问的生产者消费者问题了. #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <semaphore.h> #include <pthread…