日常题目-8/14考试
Posted jiaweigao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日常题目-8/14考试相关的知识,希望对你有一定的参考价值。
考试的题目,看似简单,实际上肥肠困难简单。
吓得我差点把内存给炸了
内存---.__O
_________ |
油 锅 / | |
\______/ |
????????
废话少说,上题目。
第一题(course)
LCH假期过得意犹未尽,所以上信息课的时候不免打瞌睡。但是他不希望落下老师讲的知识点,所以希望老师讲到重要地方的时候叫醒他。
现在高老师告诉你每节课每分钟知识点的重要程度,并且以分数量化。
LCH会告诉你他的睡眠计划(每分钟是睡着还是清醒),但他实在太困了,所以希望你只叫醒他一次,叫醒后他会在接下来的K分钟保持清醒,然后恢复他的睡眠计划(按照给出计划睡着或者清醒)。
作为好朋友你当然希望他在有限时间内获得最多的知识,所以你希望选择一种叫醒方案,让他获得的知识量最大。
【输入】
第一行输入n和k,用空格隔开,表示这堂课的总时间和叫醒一次能使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。
【输入】
输入若干组数据,每组数据包括一行三个数:n、m和k。
【输出】
按照题目要求输出每组样例的第k种排列。
【输入样例】
2 2 6
1 1 1
【输出样例】
1100
01
题解:
敬请期待~~~
LCH假期过得意犹未尽,所以上信息课的时候不免打瞌睡。但是他不希望落下老师讲的知识点,所以希望老师讲到重要地方的时候叫醒他。
现在高老师告诉你每节课每分钟知识点的重要程度,并且以分数量化。
LCH会告诉你他的睡眠计划(每分钟是睡着还是清醒),但他实在太困了,所以希望你只叫醒他一次,叫醒后他会在接下来的K分钟保持清醒,然后恢复他的睡眠计划(按照给出计划睡着或者清醒)。
作为好朋友你当然希望他在有限时间内获得最多的知识,所以你希望选择一种叫醒方案,让他获得的知识量最大。
以上是关于日常题目-8/14考试的主要内容,如果未能解决你的问题,请参考以下文章