9.18考试 第二题Dinner题解

  当时初步感觉是一个类似动归或者贪心的神题,然而由于本题已经给出顺序,贪心貌似并没有什么道理,所以放弃贪心。然后又由于这是一个环的问题,我想到了“合并石子”那种环转链的思路,然后就是一个O(n^2*m)的近似背包的打法,虽然没有去打,但应该可行吧……

  然后我又发现这道题貌似可以二分答案来进行check,然后我们就需要去枚举每一次的起始点,并进行模拟,然后加了一个剪枝即如果当前点的前缀和大于当前check的值,说明我们已经在给第一个点第一份菜单时给了他第二份菜单,而这又是不可行的,否则我们也不会搜到这了。于是乎打了一个最坏O(log sumT*n^2)的暴力模拟,当时傻乎乎的期望60分然后结果才得了20分。

  正解是的确是二分答案,只不过在check时用的是倍增,由于二分可以达到同样的效果且省事,我就用了二分去打。其实考试时想到了二分去优化,然而实现的时候打挂了,再加上如果二分复杂度就是O(log sum*n*m*log n)而题目也没有说m的范围,我只能默认m也小于等于50000然后……就放弃了80分……

  额,这道题是这次考试翻车的主要原因,出题人连对正解有直接影响的m都没说,也真是醉了……

  

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<queue>
 6 #include<algorithm>
 7 #include<cmath>
 8 #include<map>
 9 #include<vector>
10 #define N 50005
11 using namespace std;
12 int n,t[N],mt,sm,m;
13 int sum[N*2];
14 int get(int li,int ri,int L)
15 {
16     int t=li;
17     while(li<=ri)
18     {
19         int mid=(li+ri)>>1;
20         if(sum[mid]-sum[t-1]<=L) li=mid+1;
21         else ri=mid-1;
22     }
23     return li-1;
24 }
25 bool check(int L)
26 {
27     for(int i=1;i<=n;i++)
28     {
29         if(sum[i]>L)break;
30         int js=1;
31         for(int j=i;j<=i+n-1;j++)
32         {
33             j=get(j,i+n-1,L);
34             if(j<i+n-1) js++;
35             if(js>m)break;
36         }
37         if(js<=m)return 1;
38     }
39     return 0;
40 }
41 int main()
42 {
43     scanf("%d%d",&n,&m);
44     for(int i=1;i<=n;i++)
45     {
46         scanf("%d",&t[i]);
47         if(mt<t[i])mt=t[i];
48     }
49     for(int i=1;i<=n*2;i++)
50     {
51         int to=i;
52         if(i>n)to-=n;
53         sum[i]=t[to]+sum[i-1];
54     }
55     int li=mt,ri=sum[n],ans;
56     while(li<=ri)
57     {
58         int mid=(li+ri)>>1;
59         if(check(mid))
60         {
61             ans=mid;
62             ri=mid-1;
63         }
64         else li=mid+1;
65     }
66     printf("%d\n",ans);
67     return 0;
68 }

时间: 2024-10-10 14:23:48

9.18考试 第二题Dinner题解的相关文章

9.5 考试 第二题 通讯题解

问题 B: 通讯 时间限制: 1 Sec  内存限制: 256 MB 题目描述 "这一切都是命运石之门的选择." 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短 信,并由此得知了伦太郎制作出了电话微波炉(仮). 为了掌握时间机器的技术,SERN总部必须尽快将这个消息通过地下秘密通讯 网络,传达到所有分部. SERN共有N个部门(总部编号为0),通讯网络有M条单向通讯线路,每条线 路有一个固定的通讯花费Ci. 为了保密,消息的传递只能按照固定的方式进行:从一个已知消

9.18考试 第一题count题解

这道题说起来挺可惜的,当时纠结是用常数大但有可能减少递归层数的模还是用常数小但递归多的回溯纠结了好半天,最终错误的选择了摸.导致T了20分,改成回溯就A了. 先分析一下性质,我在考试的时候打表发现在数据范围内因子最多有240个,因此有可能是通过枚举因子进行计算,然后如果说对于一个块他的确可以把一棵树分为几块方法只有一种(不要问我为什么,我也不知道怎么证,但的确如此)那么我们的最坏复杂度就是O(240*n),比理论最大复杂度还多了一倍,这也是为什么当时我自己预估60分的原因,然而这就很尴尬了,这的

bzoj1052 9.20考试 第二题 覆盖问题

1052: [HAOI2007]覆盖问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2004  Solved: 937[Submit][Status][Discuss] Description 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄 膜把这些小树遮盖起来,经过一番长久的思考,他决定用3个L*L的正方形塑料薄膜将小树遮起来.我们不妨将山建 立一个平面直角坐标系,设第i棵小树的坐标为(Xi

9.5 考试 第一题 礼物题解

问题 A: 礼物 时间限制: 1 Sec  内存限制: 256 MB 题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种 礼物的喜悦值不能重复获得). 每次,店员会按照一定的概率Pi(或者不拿出礼物),将第i种礼物拿出来. 季堂每次都会将店员拿出来的礼物买下来.没有拿出来视为什么都没有买到,也 算一次购买. 众所周知,白毛切开都是黑的.所以季堂希望最后夏川的喜悦值尽可能地高. 求夏川最后最大

CSDN高校俱乐部第二届战神杯第二题题解

两个人玩一个数字游戏,给定两个正整数A,B,两个人轮流从一个数中减去另外一个数的正数倍,要保证结果非负, 首先得到0的人获胜.例如:30 8经过一步操作可以变为22 8 或者14 8 或者 6 8.两个人都足够聪明. 输入格式: 多组数据,每组数据占一行是两个空格分隔的正整数(在32位整书范围内) 输出格式: 每组数据一行,输出是第一个人赢,还是第二个人赢. 输入: 3 5 4 5 输出: 1 2 思路:如果你知道连分数,这题就是水题一道了.(记得某神说,菜鸟做完一题总是说这题很简单!没错,我就

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

20140708郑州培训第二题Impossible Game

Impossible Game题目描述你发明了一个简单的单人电脑游戏.在开始游戏时,玩家必须输入一个长度为 K 的字符串,且这个字符串的元素只能为‘A’‘B’‘C’或者‘D’.每一种字符串都代表一种颜色,不同的字符串可能有相同的颜色,而一种字符串的颜色是由你在游戏开始前决定的.为了赢得这个游戏,玩家必须经过一系列操作,将起始输入的字符串转换成另一个字符串,且两个字符串所代表的颜色相同但构成不同.游戏规定了 N 种置换规则,每种规则由两个长度相同的字符串 a[i]和 b[i]表示,且 a[i]和

2016年下半年信息安全工程师考试真题含答案(下午题)

2016年下半年信息安全工程师考试真题含答案(下午题) https://www.moondream.cn/?p=328 试题一(共20分) 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内. [说明] 研究密码编码的科学称为密码编码学,研究密码破译的科学称为密码分析学,密码编码学和密码分析学共同组成密码学.密码学作为信息安全的关键技术,在信息安全领域有着广泛的应用. [问题1](9分) 密码学的安全目标至少包括哪三个方面?具体内涵是什么? [问题2](3分) 对下列违规安全事件,

2016/1/12 第一题 输出 i 出现次数 第二题 用for循环和if条件句去除字符串中空格 第三题不用endwith 实现尾端字符查询

1 import java.util.Scanner; 2 3 4 public class Number { 5 6 private static Object i; 7 8 /* 9 *第一题 mingrikejijavabu中字符“i” 出现了几次,并将结果输出*/ 10 public static void main(String[] args) { 11 12 String r ="imingrikejijavabi"; 13 14 15 //第一种 截取 16 int a=