• NOIP2018Day1!!!题目出炉!!!


    今天是NOIP2018 Day1的日子,小编作为学生党,也参加了NOIP。

    自测100,太烂了QAQ

    希望明天发挥正常。

    下面来给题目和我的思路。

    T1

    铺设道路

    题目描述

    春春是一名道路工程师,负责铺设一条长度为 n的道路。

    铺设道路的主要工作是填平下陷的地表。整段道路可以看作是 n 块首尾相连的区 域,一开始,第 i 块区域下陷的深度为 di 。 春春每天可以选择一段连续区间[L,R]  ,填充这段区间中的每块区域,让其下陷深 度减少 1。在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 0 。 春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变 为 0

    输入输出格式

    输入格式:

    输入文件包含两行,第一行包含一个整数 n,表示道路的长度。 第二行包含 n 个整数,相邻两数间用一个空格隔开,第 个整数为 di

    输出格式:

    输出文件仅包含一个整数,即最少需要多少天才能完成任务。

    输入输出样例

    输入样例#1:
    6   
    4 3 2 5 3 5 
    
    输出样例#1:
    9

    说明

    一种可行的最佳方案是,依次选择: [1,6][1,6][1,2]、[1,1[4,6][4,4][4,4][6,6][6,6
    对于 30%30\%30% 的数据,1≤n≤10
    对于 70%70\%70% 的数据,1≤n≤1000
    对于 100%100\%100% 的数据,1≤n≤100000,0≤di≤10000

    QAQ,其实还蛮简单的。

    我是这样想的:

    首先,样例解释告诉我们:尽量一次填坑选最大的区间。让我们来模拟一下:

    我们每次记录一下最小值,Ans就累加min,在把所有区间的数减min,再以min的编号为中间点,向两边递归,是一个很类似二分的算法。

    下面我们来付上代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,a[100010];
     4 int ans=0;
     5 int Read()
     6 {
     7     char a=getchar();
     8     int f=1,r=0;
     9     while(a<'0'||a>'9')
    10     {
    11         if(a=='-')
    12             f=-1;
    13         a=getchar();
    14     }
    15     while(a<='9'&&a>='0')
    16     {
    17         r=r*10+a-'0';
    18         a=getchar();
    19     }
    20     return r*f;
    21 }//读入优化,可删去
    22 void search(int left,int right)
    23 {
    24     if(right<left)
    25         return;
    26     int minn=0x3f3f3f3f,mid;
    27     for(int i=left;i<=right;i++)
    28     {
    29         if(minn>a[i])
    30         {
    31             minn=a[i];
    32             mid=i;
    33         }
    34     }
    35     ans+=minn;
    36     for(int i=left;i<=right;i++)
    37         a[i]-=minn;
    38     search(left,mid-1);
    39     search(mid+1,right);
    40 }//二分搜索
    41 int main()
    42 {
    43     n=Read();
    44     for(int i=1;i<=n;i++)
    45         a[i]=Read();
    46     search(1,n);
    47     cout<<ans<<endl;
    48     return 0;
    49 }

    这其实就完了,大家可以在 NOIP2018提高自测 测评自己的代码。

    但是,考试结束后,我意识到了一点,点开下面的链接,仔细对比,你也懂。

    QAQ

    不懂得私信。

    T2

    货币系统

    题目描述

    在网友的国度中共有 n种不同面额的货币,第 i 种货币的面额为 a[i],你可以 假设每一种货币都有无穷多张。为了方便,我们把货币种数为 n、面额数组为 a[1..n] 的货币系统记作 (n,a)

    在一个完善的货币系统中,每一个非负整数的金额 x都应该可以被表示出,即对 每一个非负整数 x,都存在 n个非负整数 t[i]满足 a[i]×t[i]的和为 x。然而, 在网友的国度中,货币系统可能是不完善的,即可能存在金额 x 不能被该货币系统表示出。例如在货币系统 n=3, a=[2,5,9] 中,金额 1,3 就无法被表示出来。

    两个货币系统 (n,a)(m,b) 是等价的,当且仅当对于任意非负整数 x,它要 么均可以被两个货币系统表出,要么不能被其中任何一个表出。

    现在网友们打算简化一下货币系统。他们希望找到一个货币系统 (m,b),满足 (m,b) 与原来的货币系统 (n,a) 等价,且 m尽可能的小。他们希望你来协助完成这个艰巨的任务:找到最小的 m

    输入输出格式

    输入格式:

    输入文件的第一行包含一个整数 T,表示数据的组数。

    接下来按照如下格式分别给 出 T 组数据。 每组数据的第一行包含一个正整数 n。接下来一行包含 n 个由空格隔开的正整数 a[i]

    输出格式:

    输出文件共有 T行,对于每组数据,输出一行一个正整数,表示所有与 (n,a) 等价的货币系统 (m,b)中,最小的 m

    输入输出样例

    输入样例#1: 复制
    2 
    4 
    3 19 10 6 
    5 
    11 29 13 19 17 
    输出样例#1: 复制
    2   
    5  

    其实,这道题也不难,思路我在赛后才想出来,于是也没写代码。

    这就是一个完全背包问题!!!

    一个数可以选多次,要满足和为一个数!

    当时我在考场上怎么没想到啊QAQ

    我实在是没办法。只能在心里无助的呼喊。

    最后一题

    不会QAQ

    我太弱了,毕竟还有很大的学习空间,这一题我是一点思路都没有,如果我没有脉动——仙人掌口味,就撑不到现在了QAQ

    上题目吧。

    这里我真的无话可说,希望大佬帮帮蒟蒻,提供一个解答,不胜感激。

    T3

    赛道修建

    题目描述

    C 城将要举办一系列的赛车比赛。在比赛前,需要在城内修建 m 条赛道。 

    C 城一共有 n 个路口,这些路口编号为 1,2,…,n,有 n−1条适合于修建赛道的双向通行的道路,每条道路连接着两个路口。其中,第 iii 条道路连接的两个路口编号为 aibi,该道路的长度为 li。借助这 n−1 条道路,从任何一个路口出发都能到达其他所有的路口。

    一条赛道是一组互不相同的道路 e1,e2,…,ek,满足可以从某个路口出发,依次经过 道路 e1,e2,…,ek(每条道路经过一次,不允许调头)到达另一个路口。一条赛道的长度等于经过的各道路的长度之和。为保证安全,要求每条道路至多被一条赛道经过。 

    目前赛道修建的方案尚未确定。你的任务是设计一种赛道修建的方案,使得修建的 m 条赛道中长度最小的赛道长度最大(即 m条赛道中最短赛道的长度尽可能大)

    输入输出格式

    输入格式:

    输入文件第一行包含两个由空格分隔的正整数 n,m,分别表示路口数及需要修建的 赛道数。

    接下来 n−1行,第 iii 行包含三个正整数 ai,bi,li,表示第 i条适合于修建赛道的道 路连接的两个路口编号及道路长度。保证任意两个路口均可通过这 n−1条道路相互到达。每行中相邻两数之间均由一个空格分隔。

    输出格式:

    输出共一行,包含一个整数,表示长度最小的赛道长度的最大值。

    输入输出样例

    输入样例#1:
    7 1 
    1 2 10 
    1 3 5 
    2 4 9 
    2 5 8 
    3 6 6 
    3 7 7
    输出样例#1:
    31
    输入样例#2:
    9 3 
    1 2 6 
    2 3 3 
    3 4 5 
    4 5 10 
    6 2 4 
    7 2 9 
    8 4 7 
    9 4 4
    输出样例#2:
    15

     

    对于今天的题目,我也不能多说什么,祝愿大家的mark++,rank--;

    大家可以去洛谷(上面的链接)自测一下分数,好让自己心里踏实一点。

    题目文件下载

    明天又是苦战的一天,我们明天继续!

     
  • 相关阅读:
    编译原理-第二章 一个简单的语法指导编译器-2.4 语法制导翻译
    编译原理-第二章 一个简单的语法指导编译器-2.3 语法定义
    编译原理-第二章 一个简单的语法指导编译器-2.2 词法分析
    LeetCode 1347. Minimum Number of Steps to Make Two Strings Anagram
    LeetCode 1348. Tweet Counts Per Frequency
    1349. Maximum Students Taking Exam(DP,状态压缩)
    LeetCode 1345. Jump Game IV(BFS)
    LeetCode 212. Word Search II
    LeetCode 188. Best Time to Buy and Sell Stock IV (动态规划)
    LeetCode 187. Repeated DNA Sequences(位运算,hash)
  • 原文地址:https://www.cnblogs.com/sillyben/p/9939488.html
Copyright © 2020-2023  润新知