zoukankan      html  css  js  c++  java
  • 第八周组队赛

    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
    ",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 }
  • 相关阅读:
    scala学习笔记:理解stream和view
    scala学习笔记:变量声明中的模式
    scala学习笔记:理解并行集合par
    快速了解Scala技术栈
    scala学习笔记:控制抽象
    scala中的call-by-name和call-by-value
    scala学习笔记:各种奇怪的写法
    scala学习笔记:match与unapply()
    scala学习笔记:无参函数
    scala学习笔记:函数与方法
  • 原文地址:https://www.cnblogs.com/LLLAIH/p/9832119.html
Copyright © 2011-2022 走看看