zoukankan      html  css  js  c++  java
  • jzoj C组 2017.1.20 比赛

    第一题——鸡腿の树荫

    题目描述

    【故事の背景】

     又到了夏天啦~~鸡腿这样的胖纸最不喜欢大热天了。为了避暑,鸡腿早在去年就种了好多树,现在就可以享受树荫啦!但是鸡腿有一个坏习惯,他必须爬到树上去避暑„谁都不知道为什么„但是他的体重太大了,每次他爬上一棵树都会把它压塌了再下来。如果他还没爬爽,他还会把其他连续的一排树压倒„(反正是他种的)你是鸡腿的好盆友,自然想帮鸡腿改掉坏习惯。 
    

    【问题の描述】

     现在你想统计一下,到底倒了多少树„„
    
     我们假定鸡腿种的树是一共有L棵,从1到L编号,按照1m的距离依次排列,可以看成数轴上1到L的一共L个点。每天鸡腿睡塌的树是一个连续的区间,鸡腿一共花了N天来糟蹋树木,给定每天睡的区间(鸡腿可能会不小心又爬到压塌的树上,使得破坏程度更大),求出所有不曾被压塌的树的数量。 
    

    输入

    第1行两个整数N和L。

    第2-N+1行,每行两个整数Xi和Yi表示一段区间。

    输出

    N行,每行一个数表示没有被睡过的树木的数量。

    样例输入

    2 4

    2 3

    3 4

    样例输出

    2

    1

    数据范围限制

    【数据の规模】

    对于50%的数据:Xi,Yi,N≤1000;

    对于100%的数据: Xi,Yi,N≤10^5。


    这题用暴力只能拿40分,我们可以同a数组来存储该位置的区间。我们可以分两种情况来判断:
    ①如果该a[x]为0(表明还么有枚举到该棵树),则 a[x]:=y; inc(x); dec(total);
    ②如果a[x]有值(表明以前已经有枚举到这棵树),则z:=a[x]; if a[x]< y then a[x]:=y; x:=z+1;
    最后再输出total


    第二题——晒衣服题目描述

    洗完衣服后,你就要弄干衣服。衣服在自然条件下用1个单位的时间可以晒干A点湿度。现在买了1台烘衣机,使用烘衣机可以让你用1个单位的时间使1件衣服除开自然晒干的A点湿度外,还可烘干B点湿度,但在1个单位的时间内只能对1件衣服使用。
    
     N件衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服的最少时间(湿度为0为干)。
    

    输入

    第一行N,A,B;
    

    接下来N行,每行一个数,表示衣服的湿度(1<=湿度,A,B<=500000,1<=N<=500000)。

    输出

    一行一个整数,表示最少时间。

    样例输入

    3 2 1

    1

    2

    3

    样例输出

    1

    数据范围限制

    (1<=湿度,A,B<=500000,1<=N<=500000)

    提示

    【样例解析】:

    第1个单位时间内,用机器处理第3件衣服,此外,所有衣服自然晒干2。
    

    这题可以用两种方法做
    ①这题可以用水法,先找出最大的湿度,然后将该湿度b[w]加一。一切时间决定于最大的湿度。
    ②二分答案。


    代码如下:

    var b:array[0..500000]of longint;
        n,max,i,x,y,w,l:longint;
    
    begin
      assign(input,'dry.in');
      assign(output,'dry.out');
      reset(input);
      rewrite(output);
      readln(n,x,y);
      for i:=1 to n do
        begin
          readln(w);
          inc(b[w]);
          if w>max then max:=w;
        end;
      l:=0;
      while max>l*x do
        begin
          dec(b[max]);
          inc(b[max-y]);
          while b[max]=0 do dec(max);
          inc(l);
        end;
      writeln(l);
      close(input);
      close(output);
    end.

    第三题——鸡腿の小路

    题目描述

    【故事の背景】

     鸡腿终于意识到了毁坏树木是不对的,为了补偿之前毁坏树木造成的景观破坏,他决定在这些个树木被毁坏的地方建一条小路。为了鼓励鸡腿你当然也投入到了如火如荼的建设活动中来。经过一个月的精心建设,小路已经有了模样,不过因为砖头还没完全铺好,一些位置还是到不了。
    

    【问题の描述】

     鸡腿想到了一个很高(sha)明(bi)的问题,现在这条小路的开头和结尾都弄好了,但是中间有很多位置还是坑爹的没铺地砖,那么鸡腿从1的位置开始走,因为腿短的原因每次最多走M格(虽然腿短,M却可以很大哦~),鸡腿能不能从开头走到结尾呢? 
    

    输入

    第一行两个整数N、M。

    第2行,一个长度为N的字符串表示建设情况,若为“.”表示建好了,若为“#”表示没建好。

    保证开头结尾都建好了。

    输出

    一行一个字符串,如果可以就输出“YES”,否则输出“NO”。

    样例输入

    input1:

    2 1

    ..

    Input2

    5 2

    .#.#.

    Input3

    7 3

    .#.###.

    样例输出

    Output1

    YES

    Output2

    YES

    Output3

    NO

    数据范围限制

    对于50%的数据:0 < N,M ≤ 1000;

    100%的数据:0 < N,M ≤ 3*10^5。


    壮哉我大水题也

    此题就是一道大水题,竟然还放在第三题。
    枚举有没有长度大于等于他最多跨的格子,就AC


    代码如下:

    var  n,m,i,l:longint;
         x:ansistring;
    begin
      assign(input,'road.in');
      assign(output,'road.out');
      reset(input);
      rewrite(output);
      readln(n,m);
      readln(x);
      for i:=1 to length(x) do
        if x[i]='#' then
          begin
            l:=i;
            while (x[l]='#')and(l<=n) do
              begin
                inc(l);
                if l-i>=m then
                  begin
                    write('NO');
                    close(input);
                    close(output);
                    halt;
                  end;
              end;
          end;
      write('YES');
      close(input);
      close(output);
    end.

    第四题——鸡腿の游戏

    题目描述

    【故事の背景】

      俗话说的好,早睡早起方能养生„„鸡腿终于结束了建小路的工程,他终于有时间出来玩啦~~鸡腿决定来找你玩他刚发明的新式游戏~~
    

    【问题の描述】

      鸡腿想到了一个很高(sha)明(bi)的游戏。给定一个N,然后写出两个长度为N*2的01串上下对应。每次呢鸡腿先走,他可以选择一列,如果上面那个是1他就得一分否则不得分。然后你走,你也选择一列,下面那个是1你就得一分否则不得分。选过的列不能再选,所有的列都被选了就结束了!最后谁得分最高谁获胜。 
    

    输入

    第一行两个整数N。

    第2行和第3行,每行一个长度为2*N的01串。

    输出

    一行一个字符串,如果鸡腿赢输出“First”,如果你赢输出“Second”,平局输出“Draw”。

    样例输入

    Input1

    2

    0111

    0001

    Input2

    3

    110110

    001001

    Input3

    4

    01100000

    10010011

    样例输出

    Output1

    First

    Output2

    First

    Output3

    Second

    数据范围限制

    【数据の规模】

    对于50%的数据:0 < N ≤ 5000;

    100%的数据:0 < N ≤ 10^6。


    也是一道大水题,不过找规律需要点时间。
    我们将上面为一的个数设为total1
    将下面为一的个数设为total2
    将上面和下面都为一的个数设为total
    规律如下:
    ①如果total1>total2 则输出First
    ②如果total1=total2:
    (1)如果total为偶数,则输出Draw
    (2)如果total为奇数,则输出First
    ③如果total1=total2-1,则输出Draw
    ④如果total1< total2-1,则输出Second


    代码如下:

    var  n,total,total1,total2:int64;
         i:longint;
         x,y:array[1..10000000]of char;
    begin
      assign(input,'game.in');
      assign(output,'game.out');
      reset(input);
      rewrite(output);  
      readln(n);
      for i:=1 to n*2 do
        begin
          read(x[i]);
          if x[i]='1' then inc(total1);
        end;
      readln;
      for i:=1 to n*2 do
        begin
          read(y[i]);
          if y[i]='1' then
            begin
              inc(total2);
              if x[i]='1' then inc(total);
            end;
        end;
      if total1>total2 then write('First');
      if total1<total2-1 then write('Second');
      if total1=total2-1 then write('Draw');
      if total1=total2 then
        if total mod 2=0 then write('Draw')
        else write('First');
      close(input);
      close(output);
    end.
    
  • 相关阅读:
    Windows常用cmd命令总结
    电脑UEFI启动是什么?
    PHP 7天前的时间戳
    背景图片
    SQLite/SQL Server Compact Toolbox
    修改浏览器下拉条颜色和粗细
    thinkphp5 apache htaccess配置文件重写
    thinkphp5 token验证
    英文共享js
    ul高度为0的解决方法
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412442.html
Copyright © 2011-2022 走看看