用一个树状数组维护前缀和,每次我二分地找一个位置,使得我能一路买过去 但这个买不了 那以后肯定也都买不了了,就把它改成0,再从头二分地找下一个位置,直到这一圈我可以跑下来 然后就看跑这一圈要花多少钱.能买多少糖,拿T除一除,减一减,再去跑下一圈 每个位置只会被删一次,所以复杂度是$O(nlog^2n)$的 但那个用树状数组再二分的过程 其实大概可以在线段树上分治来做到一个log,但我哪会啊 #include<bits/stdc++.h> #define pa pair<int,int&g…
~~~题面~~~ 题解: 可以发现,每走完一圈付的钱和买的数量是有周期性的,即如果没有因为缺钱而买不起某家店的东西,那么这一圈的所以决策将会和上一圈相同,这个应该是很好理解的,想想就好了. 因为钱数固定时,决策固定,所以每次都O(n)扫一遍看当前情况下走一圈会花多少钱. 然后直接一直取这么多钱,直到钱不够为止,再进行下一次计算走一圈的钱数,显然用类似取模的东西可以解决. 为什么这样的复杂度是正确的呢? 一开始觉得是$n^2$的,还想了半天如何优化,但其实因为每次钱数都取了模,而一个数每次取模至少…
考场上切的,挺简单的~ Code: #include <cstdio> #include <algorithm> #define N 200005 #define inf 1000000004 #define ll long long #define setIO(s) freopen(s".in","r",stdin) , freopen(s".out","w",stdout) using namesp…
D. Berland Fair time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output XXI Berland Annual Fair is coming really soon! Traditionally fair consists of nn booths, arranged in a circle. The booths ar…
题目传送门 题目大意:一圈人围起来卖糖果,标号从1-n,每个位置的糖果都有自己的价格,一个人拿着钱从q开始走,能买则买,不能买则走到下一家,问最多能买多少件物品. 思路:此题的关键是不能买则走到下一家,一旦走到下一家,我们会发现之前的这家以后无论转几圈我们都买不起,所以直接把这个店删掉就可以了. 于是先将n当成周期,算出此时的sum,和原来的money比较,能买几个周期则买几个周期,然后遍历双向链表,不能买则删去,更新周期和sum,继续判断能不能买得起此时的周期,然后走到下一家店,直到剩下一家店…
Description 给定 \(n\) 个商店,他们围成一个圆圈,按照顺时针从 \(1\) 到 \(n\) 编号.你有 \(T\) 元钱,从 \(1\) 号点开始按照顺时针方向走,每到一个商店,只要钱够就必须买这个商店的物品.商店中物品是无限的,即多次到达可能多次购买.求会买多少件物品 Input 第一行是一个整数 \(n\) 下面一行 \(n\) 个整数 \(a_i\),代表每个商店物品的价格 Output 一行一个整数代表答案 Hint \(1~\leq~n~\leq~2~\times~1…
题意:初始有t元,每次从1开始买,从1到n依次有n个人,每个人的东西价格为a[i],该人依次能买就买,到n之后再回到1从头开始,问最后能买到的东西数量 n<=2e5,t<=1e18,a[i]<=1e9 思路:显然购买是有周期的,每次周期变化都会少至少一个人,所以至多进行n次周期的变化 #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<…
XXI Berland Annual Fair is coming really soon! Traditionally fair consists of nnbooths, arranged in a circle. The booths are numbered 11 through nn clockwise with nnbeing adjacent to 11. The ii-th booths sells some candies for the price of aiai burle…
time limit per test: 2 secondsmemory limit per test: 256 megabytesinput: standard inputoutput: standard output XXI Berland Annual Fair is coming really soon! Traditionally fair consists of nnn booths, arranged in a circle. The booths are numbered 111…
题意:一个人  有T块钱 有一圈商店 分别出售 不同价格的东西  每次经过商店只能买一个  并且如果钱够就必须买 这个人一定是从1号店开始的!(比赛的时候读错了题,以为随意起点...)问可以买多少个 思路:这个人有T块钱  走一圈之后可以买num个 花了sum块钱 那么走第二圈的时候 能买的东西是一圈的子集 T/sum 表示还能够执行多少次买东西买完之后T%=sum继续递归上述步骤  直到 T=0||num=0 也就是没钱或者 一个都 买不起 参考:https://blog.csdn.net/S…