第八周组队赛

D - Garbage Disposal

 

Description

 

Enough is enough. Too many times it happened that Vasya forgot to dispose of garbage and his apartment stank afterwards. Now he wants to create a garbage disposal plan and stick to it.

For each of next n

days Vasya knows ai — number of units of garbage he will produce on the i-th day. Each unit of garbage must be disposed of either on the day it was produced or on the next day. Vasya disposes of garbage by putting it inside a bag and dropping the bag into a garbage container. Each bag can contain up to k

units of garbage. It is allowed to compose and drop multiple bags into a garbage container in a single day.

 

Being economical, Vasya wants to use as few bags as possible. You are to compute the minimum number of bags Vasya needs to dispose of all of his garbage for the given n

days. No garbage should be left after the n

-th day.

 

Input

The first line of the input contains two integers n

and k (1n2105,1k109) — number of days to consider and bag's capacity. The second line contains n space separated integers ai (0ai109) — the number of units of garbage produced on the i

-th day.

 

Output

Output a single integer — the minimum number of bags Vasya needs to dispose of all garbage. Each unit of garbage should be disposed on the day it was produced or on the next day. No garbage can be left after the n

 

-th day. In a day it is allowed to compose and drop multiple bags.

 

Sample Input

Input
3 2
3 2 1
Output
3
Input
5 1
1000000000 1000000000 1000000000 1000000000 1000000000
Output
5000000000
Input
3 2
1 0 1
Output
2
Input
4 4
2 8 4 1
Output
4
题意:
有n天,第i天有a[i]个垃圾,每天的垃圾最多能留到第二天扔,每个垃圾口袋最多装k个垃圾,问,最少用多少个垃圾口袋能把所有的垃圾装完。
思路:
把每天的垃圾数分两种,一种是刚好能用垃圾口袋装下的;一种是还剩余的垃圾,这个时候,把剩余的垃圾留到第二天去处理,将第二天的垃圾数减掉(k-剩余的),让第一天剩余的垃圾和第二天里的垃圾凑成一个垃圾口袋
如果,第二天的垃圾数减去第一天需要的后小于0,这个时候就让第二天的垃圾数等于0。然后输出垃圾口袋数就好
注意ans要开long long
 1 #include<algorithm>
 2 #include<cstdio>
 3 #include<iostream>
 4 using namespace std;
 5 int main(){
 6     int n,k;
 7     while(~scanf("%d %d",&n,&k)) {
 8         int a[200005];
 9         for(int i=1;i<=n;i++)
10             scanf("%d",&a[i]);
11         long long ans=0,t=0;
12         for(int i=1;i<=n;i++) {
13             ans+=a[i]/k;//当天刚好能装袋的垃圾
14             t=a[i]%k;//剩余没能当天装袋的垃圾
15             if(t){//如果剩余的垃圾>0
16                     
17                 a[i+1]-=k-t;//将第二天的垃圾数减去第一天剩余装袋的垃圾所需要的垃圾
18                 if(a[i+1]<0)//如果相见之后垃圾数<0
19                     a[i+1]=0;//让垃圾数=0
20                 ans++;//垃圾口袋数++
21             }
22         }
23         printf("%lld\n",ans);
24     }
25     return 0;
26 }

 

H - BerOS File Suggestion

Description

Polycarp is working on a new operating system called BerOS. He asks you to help with implementation of a file suggestion feature.

There are n

files on hard drive and their names are f1,f2,,fn. Any file name contains between 1 and 8

characters, inclusive. All file names are unique.

The file suggestion feature handles queries, each represented by a string s

. For each query s it should count number of files containing s as a substring (i.e. some continuous segment of characters in a file name equals s

) and suggest any such file name.

For example, if file names are "read.me", "hosts", "ops", and "beros.18", and the query is "os", the number of matched files is 2

(two file names contain "os" as a substring) and suggested file name can be either "hosts" or "beros.18".

Input

The first line of the input contains integer n

(1n10000

) — the total number of files.

The following n

lines contain file names, one per line. The i-th line contains fi — the name of the i-th file. Each file name contains between 1 and 8

characters, inclusive. File names contain only lowercase Latin letters, digits and dot characters ('.'). Any sequence of valid characters can be a file name (for example, in BerOS ".", ".." and "..." are valid file names). All file names are unique.

The following line contains integer q

(1q50000

) — the total number of queries.

The following q

lines contain queries s1,s2,,sq, one per line. Each sj has length between 1 and 8

characters, inclusive. It contains only lowercase Latin letters, digits and dot characters ('.').

Output

Print q

lines, one per query. The j-th line should contain the response on the j-th query — two values cj and tj

, where

  • cj
is the number of matched files for the j
  • -th query,
  • tj
is the name of any file matched by the j
  • -th query. If there is no such file, print a single character '-' instead. If there are multiple matched files, print any.

Sample Input

Input
4
test
contests
test.
.test
6
ts
.
st.
.test
contes.
st
Output
1 contests
2 test.
1 test.
1 .test
0 -
4 .test

MAP是个好东西
题意:
给你n个字符串,再给你q次查询,问你每一次查询的字符串是n个字符串中多少个字符串的子串,并随机输出其中一个原串
    分析:将给出的n个字符串的所有子串全部存起来,长度为1的子串,长度为2....长度为size的子串,再将查询的字符串与所有的子串比对。再开一个map,用来记录该子串所在的原串。
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<map>
 5 #include<iostream>
 6 using namespace std;
 7 map<string,int> strr;
 8 map<string,string> sstr;
 9 int main()
10 {
11     int n;
12     while(~scanf("%d",&n)) {
13         while(n--) {
14             string a;
15             cin>>a;
16             map<string,int> outrepeat;//去重,防止一个字符串中,同样的子串出现不止一次
17             for(int i=0;i<a.size();i++) {
18                 for(int j=1;j<=a.size();j++) {
19                     string b;
20                     b=a.substr(i,j);
21                     if(outrepeat[b]==0) {//去重
22                         strr[b]++;//该子串在n个原串中出现的次数
23                         sstr[b]=a;//记录该子串所属的原串
24                         outrepeat[b]=1;
25                     }
26                 }
27             }
28         }
29        int m;
30        scanf("%d",&m);
31        while(m--) {
32         string c;
33         cin>>c;
34         if(strr[c]>0)
35         cout<<strr[c]<<" "<<sstr[c]<<endl;
36         else
37         cout<<"0 -"<<endl;
38        }
39     }
40     return 0;
41 }

 

 

posted on 2018-10-22 19:21  一只小毛球  阅读(133)  评论(0编辑  收藏  举报

导航