zoukankan      html  css  js  c++  java
  • 8/14考试 JWG

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

    吓得我差点把内存给炸了

         内存---.__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<cstdio>
     2 int main()
     3 {
     4     //freopen("course.in","r",stdin);
     5     //freopen("course.out","w",stdout);
     6     int kn[100005],sl[100005];
     7     int n,k;
     8     int sum=0;
     9     int i,j;
    10     int qz[100005]={};
    11     scanf("%d%d",&n,&k);
    12     for(i=1;i<=n;i++)
    13         scanf("%d",&kn[i]);
    14     for(i=1;i<=n;i++)
    15     {
    16         qz[i]=qz[i-1];
    17         scanf("%d",&sl[i]);
    18         if(sl[i])
    19             sum+=kn[i]; 
    20         else
    21             qz[i]+=kn[i];
    22     }
    23     int ch,mxch=0;
    24     for(i=k-1;i<=n;i++)
    25     {
    26         ch=qz[i]-qz[i-k];
    27         if(ch>mxch)
    28             mxch=ch;
    29     }
    30     printf("%d",mxch+sum);
    31     return 0;
    32 }

     


    第二题(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 a,b=1,sum[1000005]={0,1};
     4 int main()
     5 {
     6     //freopen("stone.in","r",stdin);
     7     //freopen("stone.out","w",stdout);
     8     int n,k;
     9     scanf("%d",&n);
    10     int i,j;
    11     for(i=1;i<=n;i++)
    12     {
    13         scanf("%d",&a);
    14         sum[i]=sum[i-1]+b;
    15         b=a;
    16         //cout<<sum[i]<<' ';
    17     }
    18     //cout<<endl;
    19     scanf("%d",&k);
    20     for(i=1;i<=k;i++)
    21     {
    22         int x;
    23         scanf("%d",&x);
    24         int l=1,r=n;
    25         while(l<r)
    26         {
    27             int mid=(l+r)/2+1;
    28             if(sum[mid]>x)
    29                 r=mid-1;
    30             else
    31                 l=mid;
    32         }
    33         printf("%d\n",r);
    34     }
    35     return 0;
    36 }

     

     


    第三题(ball)

    【问题描述】

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

    【输入】

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

    【输出】

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

    【输入样例】

    2 2 6

    1 1 1

    【输出样例】

    1100

    01

     

    题解:

    敬请期待~~~

  • 相关阅读:
    提取BioGRID中的基因symbol和得分所在列
    windows端同步数据到samba共享
    C++的基本语法
    上传文件到服务器功能
    django数据库的使用
    django文件的下载实现
    获取文本域输入的内容
    js的if判断
    ajax的使用
    Oracle ADG备库新增变为一主多从
  • 原文地址:https://www.cnblogs.com/jiaweigao/p/9475372.html
Copyright © 2011-2022 走看看