CodeFores Round53(div.2) D.Berland Fair

 1 #include <iomanip>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cmath>
 5 #include <cstring>
 6 #include <algorithm>
 7 #include <queue>
 8 #include <stack>
 9 #include <vector>
10 #include <map>
11 using namespace std;
12 const int nmax=200200;
13 int main(int argc, char *argv[])
14 {
15     int n,a[nmax];
16     long long t;
17     scanf("%d%I64d",&n,&t);
18     int mi=1e9+10;
19     for(int i=1;i<=n;i++)
20     {
21         scanf("%d",&a[i]);
22         if(a[i]>t)
23         {
24             i--;
25             n--;
26         }
27         if(a[i]<mi)
28         mi=a[i];
29     }
30     long long sum=0;
31     long long l=1;
32     while(1)
33     {
34         if(l==1)
35         {
36             long long sum1=0,x=0;
37             for(int i=1;i<=n;i++)
38             {
39                 if(t>=a[i])
40                     sum1+=a[i],x++;
41             }
42             if(sum1==0)
43             break;
44             sum+=(t/sum1*x);
45             t-=(t/sum1*sum1);
46         }
47         if(t<mi)
48         break;
49         if(a[l]<=t)
50         t-=a[l],sum++;
51         l++;
52         if(l==n+1)
53         l=1;
54     }
55     printf("%I64d\n",sum);
56     return 0;
57 }
58  
 1 #include <iomanip>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cmath>
 5 #include <cstring>
 6 #include <algorithm>
 7 #include <queue>
 8 #include <stack>
 9 #include <vector>
10 #include <map>
11 using namespace std;
12 const int nmax=200200;
13 int main(int argc, char *argv[])
14 {
15     int n,a[nmax];
16     long long t;
17     scanf("%d%I64d",&n,&t);
18     for(int i=1;i<=n;i++)
19         scanf("%d",&a[i]);
20     long long s,sum=0;
21     int x=0;
22     while(1)
23     {
24         for(int i=1;i<=n;i++)
25             if(s+a[i]<=t)
26                 s+=a[i],x++;
27         if(s==0)
28         break;
29         sum+=t/s*x,t%=s;
30         s=0,x=0;
31     }
32     printf("%I64d\n",sum);
33     return 0;
34 }
35  

原文地址:https://www.cnblogs.com/huluxin/p/9886414.html

时间: 2024-10-10 04:44:41

CodeFores Round53(div.2) D.Berland Fair的相关文章

构造 Codeforces Round #Pi (Div. 2) B. Berland National Library

题目传送门 1 /* 2 题意:给出一系列读者出行的记录,+表示一个读者进入,-表示一个读者离开,可能之前已经有读者在图书馆 3 构造:now记录当前图书馆人数,sz记录最小的容量,in数组标记进去的读者,分情况讨论一下 4 */ 5 /************************************************ 6 * Author :Running_Time 7 * Created Time :2015-8-6 0:23:37 8 * File Name :B.cpp 9

CodeForces - 1073D Berland Fair

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

Codeforces Round #Pi (Div. 2)——set——Berland National Library

Berland National Library has recently been built in the capital of Berland. In addition, in the library you can take any of the collected works of Berland leaders, the library has a reading room. Today was the pilot launch of an automated reading roo

Codeforces Round #526 (Div. 2) C. The Fair Nut and String

C. The Fair Nut and String 题目链接:https://codeforces.com/contest/1084/problem/C 题意: 给出一个字符串,找出都为a的子序列(比如ai,aj,ak)满足以下条件的个数: 1.子序列的索引单增(i<j<k): 2.在原字符串中,若ai=aj=ak=a,那么满足i<=k1<j,j<=k2<k 并且 ak1=ak2=b. 通俗点说,就是找这样的子序列个数:要么单个a,要么每个a之间都有一个b. 题解:

Codeforces Round #526 (Div. 2) D. The Fair Nut and the Best Path

D. The Fair Nut and the Best Path 题目链接:https://codeforces.com/contest/1084/problem/D 题意: 给出一棵树,走不重复的路径,每到一个结点加上其权值,经过一条边减去其权值,路径中途减去后不能出现负数,问怎么选择路径可以让最后得到的最大. 题解: 这题考虑用dp来做. 我们定义dp[u]为走到u点的最大值,注意这里的方向,是走到u点.题目中的意思是路径不能走回头路. 对于一个父节点u,那么我们可以根据走到其儿子结点的最

Codeforces Round #526 (Div. 2) E. The Fair Nut and Strings

E. The Fair Nut and Strings 题目链接:https://codeforces.com/contest/1084/problem/E 题意: 输入n,k,k代表一共有长度为n的多少个字符串.然后给出一个最小字符串s,最大字符串t,满足对于所有的k个字符串有s<=S<=t. 最后求满足条件的k个字符串(自己构造)的不同前缀数量的和. 题解: 这题很巧妙,设dp(i)表示长度为i的前缀的数量和,一开始有dp(1)=0. 后来随着长度的增加,我们每次可以在最后加一个a或者b,

Codeforces Round #Pi (Div. 2) B Berland National Library

思路:对于这道题,一开始并没有什么思路,但后来想了下,其实就是维护一个集合,每一个人都是不同的元素,满足了集合的互异性,而要求这个图书馆最小的容纳量,其实就是求这个集合的最大的元素量,假设在某个时刻集合里存在M个元素,是集合从开始到结束出现过的元素个数的最大值,那么就是这个图书馆的最小容纳量,如果最小容纳量比M小,那怎么容得下M个人?对于+,   他之前肯定是没进或者之前出来股,无论怎样,都要加进集合. 对于一个集合的操作,在cf种时间为上的比赛,自然选用stl的set,如果各位有更好的思路或实

Codeforces Round #Pi (Div. 2) ——B. Berland National Library

这道题我一开始想了很久,但是fst 了.而且赛后想的也不是很清楚,所以有必要把它单独分出来讲清楚. 题意: 现在在log中有n条记录.然后每一条记录都写成:"+ri"或是"-ri"的形式.(其中+是代表有人进入,-代表有人出去)ri代表的是进入人的号码. 然后问你房间中最多同时有几个人存在. 思路: 我们需要两个变量max与sum,其中max是记录房间的最大容量的,sum是表示当前还有多少空位. 1)如果一个人进来了,如果当前没有空位的话,那么就max++,使房间容

Codeforces Round #617 (Div. 3)F. Berland Beauty

题意: 给一棵树,边权未知,现在给m组约束,每组约束给出从u到v路径中的最小值,现在让你给出一组边权,使得符合之前的约束,不能给出输出-1 思路: 因为n较小,对于每组约束我们可以直接暴力修改路径上的权值,如果边的权值小于当前约束的最小值,则将权值修改,最后再根据每组约束暴力走一遍路径看路径是否满足要求,如果不满足则输出-1,最后还得对那些没有修改过的边随意赋值 #include<iostream> #include<algorithm> #include<vector>