日常题目-8/14考试

Posted jiaweigao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日常题目-8/14考试相关的知识,希望对你有一定的参考价值。

考试的题目,看似简单,实际上肥肠困难简单。

 

吓得我差点把内存给炸了

     内存---.__O
_________    |
  油  锅  /    | |
  \______/      |

  ????????

 

废话少说,上题目。


 

第一题(course)

LCH假期过得意犹未尽,所以上信息课的时候不免打瞌睡。但是他不希望落下老师讲的知识点,所以希望老师讲到重要地方的时候叫醒他。

现在高老师告诉你每节课每分钟知识点的重要程度,并且以分数量化。

LCH会告诉你他的睡眠计划(每分钟是睡着还是清醒),但他实在太困了,所以希望你只叫醒他一次,叫醒后他会在接下来的K分钟保持清醒,然后恢复他的睡眠计划(按照给出计划睡着或者清醒)。

作为好朋友你当然希望他在有限时间内获得最多的知识,所以你希望选择一种叫醒方案,让他获得的知识量最大。

 

【输入】

第一行输入nk,用空格隔开,表示这堂课的总时间和叫醒一次能使LCH保持清醒的时间。

第二行输入n个用空格隔开的数,表示这节课每分钟知识点的重要程度分值ai

第三行输入n个用空格隔开的数,表示每分钟LCH的睡眠计划,1表示他这一分钟清醒,0表示睡眠。

【输出】

 

LCH这堂课收获的最大知识量。

【输入样例】

6 3

1 3 5 2 5 4

1 1 0 1 0 0

【输出样例】

16

题解:

切!为什么LCH这么爱打瞌睡呢!废话少说,直接上代码:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     freopen("course.in","r",stdin);
 6     freopen("course.out","w",stdout);
 7     int kn[100005],sl[100005];
 8     int n,k;
 9     int sum=0; //LCH醒着的时候听到的知识
10     int i;
11     cin>>n>>k;
12     for(i=1;i<=n;i++)
13         cin>>kn[i];
14     for(i=1;i<=n;i++)
15     {
16         cin>>sl[i];
17         if(sl[i])
18             sum+=kn[i];
19     }
20     int mxch=0;//LCH被叫醒的时候听到的知识
21     int tm[100005]={};//前缀和
22     for(i=1;i<=n;i++)
23     {
24         tm[i]=tm[i-1];
25         if(!sl[i])
26             tm[i]+=kn[i];
27     }
28     cout<<endl;
29     for(i=k+1;i<=n;i++)
30         if(tm[i]-tm[i-k]>=mxch)
31             mxch=tm[i]-tm[i-k];
32     cout<<mxch+sum;
33     return 0;
34 }

第二题(stone)

WHM摆了N堆石子,他有点累,不想合并这些石子,所以他问了ZYC一个非常简单的问题:从左往右数第k个石子在哪一堆里?现在ZYC把这个问题分享给大家一起开心开心。

【输入】

输入第一行是一个数N,表示石子堆数。

第二行N个用空格隔开的数ai,表示从左往右第i堆有多少个石子。

第三行是一个数M,表示有M次询问。

第四行M个用空格隔开的数qi,表示WHM希望知道第qi个石子属于哪一堆。

【输出】

 

输出共有M行,每一行表示第qi个石子属于哪一堆。

【输入样例】

5

2 7 3 4 9

3

1 25 11

【输出样例】

1

5

3

题解:

WHM摆完石子后,强迫症的原因,他把每一堆的石子染色后按顺序排成一长串。

那么,样例就变成了这样:

①①②②②②②②②③③③④④④④⑤⑤⑤⑤⑤⑤⑤⑤⑤

▲ ▲        ▲  ▲    ▲

每堆的第一个石子分别是第1、3、10、13、17个。

典型的二分,直接上代码:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     freopen("stone.in","r",stdin);
 6     freopen("stone.out","w",stdout);
 7     int a[100005]={},sum[100005]={0,1};
 8     int n,k;
 9     cin>>n;
10     int i,j;
11     for(i=1;i<=n;i++)
12     {
13         cin>>a[i];
14         if(i==1)
15             sum[i]=1;
16         else
17         sum[i]=sum[i-1]+a[i-1];
18         cout<<sum[i]<< ;
19     }
20     cout<<endl;
21     cin>>k;
22     for(i=1;i<=k;i++)
23     {
24         int x;
25         cin>>x;
26         int l=1,r=n;
27         while(l<=r)
28         {
29             int mid=(l+r)/2;
30             if(sum[mid]>x)
31                 r=mid-1;
32             else
33                 l=mid+1;
34         }
35         cout<<r<<endl;
36     }
37     return 0;
38 }

 


第三题(ball)

【问题描述】

       LQX自从上次误导大家后一直觉得特别过意不去,这次他打算换一种玩法:他一共有n个白球(0)和m个黑球(1),他希望你帮他求出如果这些球按字典序排序(0排在1前面)的话,第k种排列方式是什么?如果不存在输出-1

【输入】

       输入若干组数据,每组数据包括一行三个数:nmk

【输出】

按照题目要求输出每组样例的第k种排列。

 

【输入样例】

2 2 6

1 1 1

【输出样例】

1100

01

 

题解:

敬请期待~~~

 

 

 

 

LCH假期过得意犹未尽,所以上信息课的时候不免打瞌睡。但是他不希望落下老师讲的知识点,所以希望老师讲到重要地方的时候叫醒他。

现在高老师告诉你每节课每分钟知识点的重要程度,并且以分数量化。

LCH会告诉你他的睡眠计划(每分钟是睡着还是清醒),但他实在太困了,所以希望你只叫醒他一次,叫醒后他会在接下来的K分钟保持清醒,然后恢复他的睡眠计划(按照给出计划睡着或者清醒)。

作为好朋友你当然希望他在有限时间内获得最多的知识,所以你希望选择一种叫醒方案,让他获得的知识量最大。

 





以上是关于日常题目-8/14考试的主要内容,如果未能解决你的问题,请参考以下文章

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务

8.8~8.14

VsCode 代码片段-提升研发效率

sublimetext3中保存代码片段

扫地阿姨看完都学会了!java高级架构师考试

日常:6.14——考试苟过记