• 一些noip模拟题一句话题解


    Problem A: 序列

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 12  Solved: 9
    [Submit][Status][Web Board]

    Description

    作为一名火星人,你为了占领地球,需要想方设法使地球人失去信心。现在你获得了一项能
    力,控制今后n天的天气温度,对于第i天,你能将温度控制在[ai,bi]中任意一个数字,你的
    目的是使其中某段时间,温度持续不下降,趁此来攻击地球。现在问你最多可以使连续的多
    少天满足温度不下降。

    Input

    第一行给出一个整数n,表示你能控制的天数。
    接下来n行,第i行给出2个整数ai,bi,表示你能控制的天气范围。保证ai<=bi。
    3<=n<=1000000,1<=ai,bi<=100000

    Output

    输出一个整数,表示答案。

    Sample Input

    4
    1 3
    2 4
    1 1
    3 4
    

    Sample Output

    2
    

    HINT

    题解:单调队列即可,我们考虑前一段是(ai-1-bi-1) 和(ai-bi) 我们后一段取(min(bi-1,ai)) 更优,

       于是我们可知当bi>maxΣ(a[i-1)则这一段可选,于是单调队列或者n2暴力+优化

    Problem B: 硬币

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 6  Solved: 5
    [Submit][Status][Web Board]

    Description

    你有n个硬币,第i个硬币面值为ai,现在总队长想知道如果丢掉了某个硬币,剩下的硬币能
    组成多少种价值?(0价值不算)

    Input

    第一行一个整数n
    第二行n个整数:a1,a2…an。
    1<=n<=100,1<=ai<=3000

    Output

    输出n行,第i行表示没有第i个硬币能组成多少种价值。

    Sample Input

    3
    1 1 3
    

    Sample Output

    3
    3
    2
    

    HINT

    题解:我们考虑先将所有硬币的方案数球出来,而每次取出一个硬币,相当于在最后放那个硬币  

       考虑dp方程:f[n][j]=f[n-1][j]( 0<j<k)

              f[n][j]=f[n-1][j-k]+f[n-1][j](k<=j)

    Problem C: 小Y的炮

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 9  Solved: 4
    [Submit][Status][Web Board]

    Description

    小Y最近开发出了批量制造大威力轰山炮的方法。才过去不到几个月,小Y就制造出了M门款
    式不同的轰山炮。第i门轰山炮发射一次,能使一座当前高度不高于Ai的山的高度降低Di(
    当然山的高度不能轰到0以下)。应政府要求,小Y要用他开发的轰山炮轰平开发区的几座山
    。由于开发区急需土地资源,政府要求小Y轰平尽量多的山(轰平:使山的高度降低至0)。
    但是小Y制造的弹药有限,导致他最多只能发射K次。
    小Y想知道,他最多能轰平几座山?轰平这些山后,弹药最多还够他发射几次?

    Input

    第一行三个正整数N,M,K,分别表示山的数目、轰山炮的款式数目、最多发射次数。
    接下来N行,每行一个正整数Hi,表示第i座山的高度,输入数据保证Hi是降序的(从大到小
    )。
    接下来M行,每行两个正整数Ai,Di,分别表示第i款轰山炮能轰的山的最高高度,和轰掉的
    山高度的减少值。
    N<=250000,M<=500,K,Hi,Ai<=10^18,Di<=500

    Output

    一行两个整数Max,Remain,分别表示最多轰平的山的数目和轰平这些山后最多的剩余发射次
    数。

    Sample Input

    3 2 3
    8
    6
    2
    10 6
    6 5
    

    Sample Output

    2 1


    题解:我们考虑将我们的炮的类型进行某种排序,最后肯定会留下一种情况:轰的限制高度低,但是轰的数量多或者
       轰的限制高度高,但是轰的数量少,于是我们可以利用这个数列进行一些操作即可!

    Problem D: tree

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 9  Solved: 5
    [Submit][Status][Web Board]

    Description

    给你一颗有根树,树上的每一条边都是只能从父亲走向儿子(即所有的路径都是没有转折的)
    。给一个整数K,问你树上有多少条路径满足路径上的边权之和为K。

    Input

    第一行给二个整数n,p,k。n表示树的大小,p表示根,k如题目描述。
    接下来n-1行,每行三个整数ai,bi,ci。表示边(ai,bi),权值ci。
    10<=n<=200000。1<=p<=n。1<=ci<=10^5。1<=k<=10^5

    Output

    输出一个整数,表示满足条件的路径总数。

    Sample Input

    5 2 2
    2 1 2
    2 3 1
    3 4 1
    3 5 1
    

    Sample Output

    3
    

    HINT

    题解:开始没看到只能从父亲转移过来,想了树的分治,但是发现复杂度不对,于是仔细读题,

       发现题目本意,直接倍增即可,因为到一个点距离为K的只有一个;

    Problem E: Poem

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 4  Solved: 3
    [Submit][Status][Web Board]

    Description

    汉字拼音共含23个声母:b,p,m,f,d,t,n,l,g,k,h,j,q,x,zh,ch,sh,r,z,c,s,y,w;共含24个韵母:a,o,e,i,u,ü,a
    i,ei,ui,ao,ou,iu,ie,ue,er,an,en,in,un,ün,ang,eng,ing,ong;共含3个介母:i,u,ü,不过ü基本不会出现在
    书写格式内。一个汉字可能是单独某个韵母,也可能由某个声母+某个韵母组成的,还可能是由某个声母+某个介母
    +某个韵母组成的。押韵在此题中的定义:假如两句话的最后一个字的韵母相同,则称这两句话押韵。
    [上为前提知识]
    小Y最近很无聊,无聊到了什么事情都不想做,只想用键盘和搜狗拼音打字法随便输一些字母,打出一堆汉字来。
    不知不觉中,小Y打出了N个汉字。小Y发现一个很有趣的现象:不改变N个汉字的位置,将其分成若干段,保证每段
    的汉字的位置都是连续的,且每段的汉字数目都相同。然后将每段作为一句诗,读出来。当然一般的诗没什么意思
    ,小Y想要让诗句能够基本押韵。基本押韵的意思就是,所有诗句中至少要有一半(假如共K句,则一半为[K/2]向
    上取整)押韵,即韵母相同。小Y想知道,做到基本押韵的话,他的诗最多能有多少句。

    Input

    第一行一个正整数N,分别表示汉字的总数。
    接下来一行,共N个汉字的拼音,相邻的拼音之间用1个空格隔开。方便起见,所有的ü被v代替。
    N<=200,出现的拼音都是现实生活中存在的。

    Output

    一行一个整数Ans表示最多的句数。

    Sample Input

    20
    chuang qian ming yue guang yi shi di shang shuang ju tou wang ming yue di tou si gu xiang
    

    Sample Output

    4
    题解:直接暴力即可,但是觉得写AC自动机好写一点实际上就是trie树毕竟没有fail指针


    Problem F: poker

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 6  Solved: 4
    [Submit][Status][Web Board]

    Description

    一副扑克牌有n张牌。一般你买的一副新扑克牌里除了这n张牌外还会有一些张特殊的牌,如
    果你不小心弄丢了n张牌中的某一张,就可以用特殊牌来代替,但是如果你弄丢两张的话就
    没有办法了,因为特殊牌上的图案是一样的。
    现在你得到了很多扑克牌,准确来说,n种牌你各有a1、a2、……、an张,同时你还有b张特
    殊牌,现在你需要从这些牌中整理出若干副牌供大家使用。整理出的一副牌可以由n种普通
    牌各一张组成,也可以由n-1种普通牌各一张再加一张特殊牌组成。
    请你设计出一种方案,整理出尽可能多的牌。

    Input

    输入包括2行
    第一行给出n和b1
    第二行给出a1,a2…an。
    1<=n<=1000000牌的数量<=10^6

    Output

    输出最多能整理出的牌的副数。

    Sample Input

    5 5
    5 5 5 5 5 
    

    Sample Output

    6
    题解:考虑二分答案+抽屉原理即可


    Problem G: 国家宝藏

    Time Limit: 10 Sec  Memory Limit: 1 MB
    Submit: 4  Solved: 2
    [Submit][Status][Web Board]

    Description

    话说ZY日行一善,终于天可怜见,某日他居然进入了传说中的国家宝藏。这个区域是个N*N
    的矩形方块。每个方块可能放置的是宝物或者是不可翻越的障碍。当某个方块放的是宝物时
    ,如果其上下左右的某个方块放置的亦是宝物时,则两个方块则被认为是互相连通的。ZY想
    到所有的宝物都拾走,但单凭他一个人的力量是不行的,此时地也怜见了,从地下冒出这个
    矩形方块的地形图,ZY有了这张地图就可以Judge出整个矩形方块被分成了多少个连通块,
    哈哈,此时他拿出他心爱的G11,召唤Oi队员来帮他的忙,但到底要叫多少个人来呢?(我
    们假设一个人可以占据一个连通块)于是这个光荣的任务就交给你了,ZY和他的Oi队员们今
    后能否过上幸福的生活就全看你的了……

    Input

    第一行一个数字N,代表矩形方块的长,N<=1000
    接下来的N行N列,代表宝物的分布,其中0代表宝物,1代表障碍。

    Output

    请输出有多少个连通块。

    Sample Input

    【输入样例1】
    3
    0 0 0
    1 1 1
    0 0 0
    【输入样例2】
    3
    0 1 1
    0 0 0
    1 1 0

    题解:直接并查集 但是卡内存,所以请小心!

    Problem J: 多项式相乘

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 1  Solved: 1
    [Submit][Status][Web Board]

    Description

    多项式相乘的展开是一件相当烦琐的工作,FireDancer快要烦死了。他把这个任务交给了你
    。为了简化,他只要你做一种多项式的展开,该种格式为(x+a1)(x+a2)(x+a3)…(x+an-1)(x
    +an),n的值事先给你。当n=2,展开式为x2+x(a1+a2)+a1a2;当n=3时,展开式为(最上面的
    数字为的是让你看清展开式的总长度)。每一个字符(包括"x"、"a"、"("、")"、"+")
    ,每一个指数的每一个数字,每一个下标的每一个数字长度都为1。如n=3时,总长度为40。

    Input

    一个整数n(0<n<=1,000,000,000)。

    Output

    若展开式的总长为t,则输出t mod 10000(t除10000取余)。

    Sample Input

    3
    

    Sample Output

    40
    

    HINT

    题解:组合数学随便写,这个东西自己推的比较好

    Problem M: 数列计数

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 5  Solved: 2
    [Submit][Status][Web Board]

    Description

    不仅循环数有美好的性质,单调的数列更有美好的性质。
    moreD喜欢单调的数列胜于循环数。所以他决定一天内背上所有长度为N的单调数列。
    这个单调数列必须严格不上升或者严格不下降,并且所有的数字必须在[1,n]内。又到了每
    日计数的时间了,又要请你帮助moreD计算出有多少符合条件的数列了。

    Input

    输入第一行仅包含一个整数N,表示数列的长度。N<=1,000,000

    Output

    输出一行仅包含一个整数,表示符合条件的数列有多少个。当然,数列的个数可能会有很多
    ,moreD只需要知道答案mod 2,000,003的值就可以了。

    Sample Input

    2
    

    Sample Output

    4
    //答案是4,数列有[1,1] [1,2] [2,1] [2,2]

    HINT

    题解:因为单调递增和单调递减--对应,所以只要求一个再*2-重复的n个,

       考虑一个dp方程表示f[i][j]代表第i个选的是j的方案数,f[i+1][j]+=f[i][k](1<=k<=j)

       发现这个就是一个前缀和,于是发现就是求n次前缀和,再次发现实际上就是组合数

       于是o(n)暴力计算即可

    Problem N: 堆蛋糕

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 3  Solved: 2
    [Submit][Status][Web Board]

    Description

    其实moreD是一个十分犀利的蛋糕师。他最喜欢的食物就是蛋糕。
    一天,他自己做出了N个圆柱状的蛋糕,每个蛋糕都有一个底面圆的半径Ri。高度都是一样
    的。
    moreD在开始享用他的蛋糕大餐之前忽然觉得,圆柱状的蛋糕没有什么诱惑力。moreD看到了
    别人结婚用的蛋糕都是很多很多层的,那样的蛋糕才比较给力。但是堆太多层的蛋糕比较困
    难,于是moreD想要堆出许多三层的蛋糕,再开始自己的蛋糕大餐。
    当然,作为蛋糕师,moreD在堆蛋糕的时候不会对蛋糕的形状有任何破坏,而且,moreD希望
    三层蛋糕的半径从上往下严格递增。这才是一个普通的好蛋糕。
    但是moreD在考虑一个十分重要的问题,最多可以堆出多少三层蛋糕呢?

    Input

    输入第一行仅包含一个整数N,表示蛋糕的数量。
    接下来N个整数,表示每个蛋糕半径的大小Ri。
    N<=3,000,000  Ri<=N

    Output

    输出一行仅包含一个整数,表示最多可以做成多少个蛋糕。

    Sample Input

    6
    1 2 3 4 3 2
    

    Sample Output

    2
    

    HINT

    题解:考虑枚举答案k,凡是出现次数大于k的按k个算,因为抽屉原理,

       放k+1放在k里面势必会有一个盒子有两个一样的无法保证严格单调

       于是乱搞即可

    Problem O: 卡片游戏

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 1  Solved: 1
    [Submit][Status][Web Board]

    Description

    有N只moreD在玩一个卡片游戏:
    首先,桌子上有M张卡片,这M张卡片分别有一个唯一的1~M的编号。N只moreD在桌子上抢牌
    。每个人最后的得分是所得的所有卡片编号的乘积(如果一张卡片都没取,得分为1)。
    这N只moreD最后报出了自己的得分。你的任务是写一个程序,判断有没有人说谎。

    Input

    输入第一行一个整数T,表示T组测试数据。
    对于每组测试数据:
    第一行:两个用空格隔开的整数:N和M,表示moreD的数量和卡片的数量
    第二行:有N个正整数Ai,表示每只moreD报出的得分。
    N<=5  M<=100 Ai<=50000 t<=10

    Output

    输出T行,每行输出'Yes'或'No',表示'Yes'表示不可能没有人说谎 , 'No'表示可能没有人
    说谎。

    Sample Input

    3
    2 3
    2 3
    2 3
    3 6
    2 5
    4 6
    

    Sample Output

    No
    Yes
    No
    //对于第一个数据,存在第一个人抢到编号为2的卡片,第二个人抢到编号为3的卡片就可以满
    足这样的情形了,所以可能没有人说谎。
    对于第二个数据,不存在任何一种抢牌方案使得两人的得分满足这样的情形,所以不可能没
    有人说谎。


    题解:考虑暴力dfs每个数给那个人,用判质数来剪枝

    Problem P: 泡泡浴

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 1  Solved: 1
    [Submit][Status][Web Board]

    Description

    其实moreD是一个十分爱干净的孩子,最近moreD迷恋上了泡泡浴。迷恋泡泡浴的原因除了泡泡特别好玩之外,还由
    于洗泡泡浴的浴缸十分奇怪,这是个地面参差不齐的浴缸。我们可以把浴缸看成N*M的矩阵,那么矩阵上的每个元
    素为该位置浴缸的高度。由于水往低处流,相邻的格子的水面高度不同,高处的水会往低处去。浴缸当然要有出水
    口,出水口在某个格子上。而且浴缸的边缘可以看作无穷高。然后大家肯定会发现,洗完泡泡浴后,把水放掉后,
    可能有些地方会积水。即水不能通过出水口流出。moreD就是喜欢看看这些积水。moreD测量了一下,自己放水之前
    浴缸的所有位置的水面高度均为K(除了浴缸底部高度大于K的格子)。如果浴缸底部高度大于K,那么这个格子没有
    水,水面高度可以当作是浴缸底部高度。然后moreD打开了出水口。请你帮moreD预测一下,当出水口不再出水了,
    浴缸每个格子的剩余的水高度是多少。(剩余的水的高度=水面高度-浴缸底部高度)

    Input

    输入第一行仅包含三个整数N,M,K,表示浴缸的大小与初始每个格子的水面高度。
    接下来N行,每行M个整数,表示每个格子浴缸底部的高度A[i,j]。
    接下来一行两个数r和c,表示出水口的行和列。
    N,M<=800  A[I,j]<=10000

    Output

    输出N行,每行包含M个整数,表示每个格子的剩余水的高度。

    Sample Input

    3 3 66
    6 9 1
    7 8 1
    6 8 1
    3 2
    

    Sample Output

    2 0 7
    1 0 7
    2 0 7
    

    HINT

    题解:考虑最小值spfa即可

    Problem Q: 树的合并

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 6  Solved: 3
    [Submit][Status][Web Board]

    Description

    话说moreD经过不懈努力,终于背完了循环整数,也终于完成了他的蛋糕大餐。
    但是不幸的是,moreD得到了诅咒,受到诅咒的原因至今无人知晓。
    moreD在发觉自己得到诅咒之后,决定去寻找闻名遐迩的术士CD帮忙。
    话说CD最近在搞OI,遇到了一道有趣的题目:
    给定两棵树,则总共有N*M种方案把这两棵树通过加一条边连成一棵树,那这N*M棵树的直径
    (树的直径指的是树上的最长简单路径)
    大小之和是多少呢?
    CD为了考验moreD是否值得自己费心力为他除去诅咒,于是要他编程回答这个问题,但是这m
    oreD早就被诅咒搞晕了头脑,就只好请你帮助他了。

    Input

    第一行两个正整数N,M,分别表示两棵树的大小。
    接下来N-1行,每行两个正整数ai,bi,表示第一棵树上的边。
    接下来M-1行,每行两个正整数ci,di,表示第二棵树上的边。
    N<=10^5,M<=10^5,1<=ai,bi<=N,1<=ci,di<=M

    Output

    一行一个整数,表示答案。

    Sample Input

    4 3
    1 2
    2 3
    2 4
    1 3
    2 3
    

    Sample Output

    53
    

    HINT

    题解:因为直径只有两棵树的直径最大值或者两条最长链之和

       于是dp即可,dp记录f,g数组表示最长链和次长链

    Problem R: 电费结算

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 2  Solved: 2
    [Submit][Status][Web Board]

    Description

    WZK最近靠租房发家致富了。作为WZK老同学的你也要租房,于是WZK决定不要房租,但是电
    费还得付。以下是用电价格:

    举个例子吧。如果你用电为10123千瓦时,那么要付2 * 100 + 3 * 9900 + 5 * 123 = 3051
    5块钱(好贵)。
    到结算电费的日子了,可是WZK家里只有一个总电表,也就是统计你和WZK总共用的电量。但
    是WZK有办法告诉你以下信息:
    1).如果按照总电表来看要交给供电局的钱A。(也就是两个人用电量加起来一起算钱)
    2).你和WZK如果分开付的话,你们付的钱的差值B。
    现在你想知道如果你单独算钱的话,需要付多少钱。当然,你的用电量不会比WZK多。
    举个例子:如果你们一起算钱要付1100,并且如果分开来算,你们的差值是300的话,那么
    你用了150kwh,WZK用了250kwh。让我们来验算一下:你们一共用电400kwh,所以要付2 * 1
    00 + 3 * 300 = 1100,你单独要付2 * 100 + 3 * 50 = 350,WZK单独要付2 * 100 + 3 * 
    150 = 650。所以最后,你只需要告诉我你单独要付350元。

    Input

    输入仅一行,包含两个整数A和B(1 ≤ A, B ≤ 10^9),含义同上。 输出描述: 输出仅一
    行一个整数,代表你单独算需要付的钱。数据保证解唯一。

    Output

    输出仅一行一个整数,代表你单独算需要付的钱。数据保证解唯一。

    Sample Input

    1100 300
    

    Sample Output

    350
    

    HINT

    题解:傻逼模拟

    Problem S: 序列和

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 5  Solved: 4
    [Submit][Status][Web Board]

    Description

    N个数排成一个环,请选出不超过K段的连续的数,段与段间不能重叠,且使得选出的数和最大。

    Input

    第一行包含两个正整数N和k。
    接下来1行描述这N个数。
    K<=10,N<=100000

    Output

    包含一个数,即要去的最大的和。

    Sample Input

    9 2
    2 -1 2 -1 2 -4 1 -1 2

    Sample Output

    7
    

    HINT

    题解:不考虑环,直接dp即可,考虑如果答案再存在(1--i)+(j--n)的这种情况,那么最小值一定不存在这种情况

       于是不考虑环求一遍最大值Max,和一遍最小值Min,于是答案为max(sum-Min,Max)

    Problem T: 计蒜姬

    Time Limit: 10 Sec  Memory Limit: 64 MB
    Submit: 3  Solved: 2
    [Submit][Status][Web Board]

    Description

    兔纸们有一个计蒜姬,奇怪的是,这个计蒜姬只有一个寄存器X。兔纸们每次可以把寄存器
    中的数字取出,进行如下四种运算的一种后,将结果放回寄存器中。
    1.X=X+X
    2.X=X-X
    3.X=X*X
    4.X=X/X
    已知初始时寄存器里的值为A,兔纸们想要知道,是否能通过若干次操作,使得最终寄存器
    里的值是B。如果可能,它们还想知道最少的操作次数。

    Input

    包含两个正整数A,B。

    1 ≤ A,B ≤ 1000000000

    Output

    一个整数,即最少操作次数,如果不存在方案,则输出-1。

    Sample Input

    3 4
    

    Sample Output

    3
    //
    第一次:3/3=1
    第二次:1+1=2
    第三次:2*2=4

    HINT

    题解:傻逼dfs

    Problem U: 修建道路

    Time Limit: 10 Sec  Memory Limit: 64 MB
    Submit: 2  Solved: 1
    [Submit][Status][Web Board]

    Description

    sub打算修建一条磁悬浮列车的通道连接现代OI王国的首都(编号为1)和sub的家(编号为n)。
    当然,现代OI集团的n(1<=n<=1000)座城市之间没有任何的磁悬浮通道,而sub通过实地勘测
    发现,一共有p(1<=P<=10000)对城市之间可以建磁悬浮通道。
    在这p对城市之中,第i对城市分别为ai,bi,它们间的距离为li(1<=li<=1000000)。数据中
    保证每对{ai,bi}最多只出现1次,
    现代OI集团决定免费帮sub修建最多k条线路的磁悬浮通道,而sub要花的钱,是他自己负责
    修建的那些线路的最长的那条路的长度。
    sub当然想花最少的钱......他想知道他最少能花多少钱。

    Input

    第1行:3个用空格隔开的整数:n,p,以及k
    第2..p+1行:第i+1行为3个用空格隔开的整数:ai,bi,li

    Output

    输出1个整数,为sub在这项工程上的最小支出.如果任务不可能完成,输出-1

    Sample Input

    5 7 1
    1 2 5
    3 1 4
    2 4 8
    3 2 3
    5 2 9
    3 4 7
    4 5 6
    //现代OI集团一共有5个城市。城市1不能直接与城市4,5相连。城市5不能直接与城市1,3相连
    。其余所有城市间均可修建轨道。现代OI集团可以免费为sub修建一条线路。

    Sample Output

    4
    //sub选择如下的修建方案:1->3,3->2,2->5,这3条路线的长度分别为4,3,9。sub让现代OI集
    团免费修建那条长度为9的路线,于是,他所需要花费的钱为4。

    HINT

    题解:枚举答案+spfa即可

  • 相关阅读:
    操作系统,,,也考完了【流坑】
    认真地搭建python开发环境
    NumPy 上手一个例子 vectorsum.py
    数字图像处理、、考完了
    Intel系列CPU的流水线技术的发展
    JSON序列化为实体对象
    一个丝滑的全屏滑动返回手势
    Swift项目兼容Objective-C问题汇总
    OC 九宫格布局
    SDWebImage 新版接口使用方法
  • 原文地址:https://www.cnblogs.com/HQHQ/p/6017419.html
Copyright © 2020-2023  润新知