zoukankan      html  css  js  c++  java
  • Codeforces 764 A-B

    翻译略戳,轻喷。。。

    A. Taymyr is calling you

    描述

    Dujikov同志正忙着为Timofey的生日选择艺术家,他收到来自Taymyr的登山家Ilia的电话。

    登山家Ilia每N分钟call,即在分钟n,2n,3n、等等。艺术家每m分钟来见Dujikov同志,即在分钟M、2M、3M等。天是Z分钟长,每天有1, 2, …, Z分钟.他应该杀死多少艺术家使当Ilia打着电话时房间里没有艺术家。

    考虑一个电话和一个艺术家的谈话,只要一分钟。

    【题意:就是Call和artist不能冲突,如果冲突就不要这个artist】

    输入

    唯一的字符串包含三个整数N,M和Z(1 ≤ N, m, Z ≤ 104)。

    输出

    打印一个整数 ,表示应该被取消艺术家的数量。

    Examples

    Input

    1 1 10

    Output

    10

    Input

    1 2 5

    Output

    2

    Input

    2 3 9

    Output

    1

    PS

    Taymyr是俄罗斯北部的一个地方。

    在第一次测试点中,艺术家们每分钟都会来,此外还有来电,所以我们需要取消他们。

    在第二个测试点中,我们需要取消第二和第四分钟来的艺术家。

    在第三个测试点,只需要取消第六分钟来的艺术家。

    思路

    就是在1..z的区间里面找n和m的公倍数有多少个全部取消了

    代码 pas

     1 program test;
     2 var
     3   n,m,z,i,j,ans:Longint;
     4   b:array[1..10000] of boolean;
     5 
     6 begin
     7    fillchar(b,sizeof(b),true);
     8    readln(n,m,z);
     9    i:=n;  j:=m;
    10    while i<=z do
    11       begin
    12           b[i]:=false;
    13           inc(i,n);
    14       end;
    15    while j<=z do
    16       begin
    17           if b[j]=false then inc(ans);
    18           inc(j,m);
    19       end;
    20    writeln(ans);
    21 end.

     

    B. Timofey and cubes

    Timofey今天生日啦!他爸妈给了他n个立方体作为一套礼物给他。每个立方体有个数字写在上面 ai, Timofey将所有立方体放在一行,然后去拆其他的礼物

    这时,他的哥哥 Dima 按照以下的规则重新整理了立方体. 假设这些立方体被编号为1-n, Dima 做了一些小步骤, 在第i步,他会将第i个立方体到第 (n - i + 1) 个立方体反转

    i ≤ n - i + 1时他会一直这样做.当做完这些操作, Dima 就跑啦【没错,他跑啦】, 并对自己感到非常自豪. 当Timofey 回头来看他的立方体时候,他发现它们的顺序变了.

    快快帮助Timofey 凭借现在的状况恢复这些立方体到初始状态

    Input

    第一行包含整数 n (1 ≤ n ≤ 2·105) — 立方体的数量

    第二行包含 n 个整数a1, a2, ..., an ( - 109 ≤ ai ≤ 109), ai 是当Dima 瞎搞完后,第i个立方体上写着的数字

    Output

    输出n个整数用空格隔开 —开始时每个立方块上写着的数

    可以保证这个答案啊是唯一的

    Examples

    input

    7
    4 3 7 6 9 1 2

    output

    2 3 9 6 7 1 4

    input

    8
    6 1 4 2 5 6 9 2

    output

    2 1 6 2 5 4 9 6

    Note

    考虑第一个样例:

    1. 刚开始的数列是 [2, 3, 9, 6, 7, 1, 4].
    2. 第一次操作完是 [4, 1, 7, 6, 9, 3, 2].
    3. 第二次操作完 [4, 3, 9, 6, 7, 1, 2].
    4. 第三次操作完 [4, 3, 7, 6, 9, 1, 2].
    5. 第四次我们只需要翻转中间那个数, 所以并没改变啥.

     最终结果 is [4, 3, 7, 6, 9, 1, 2].

    So the answer for this case is row [2, 3, 9, 6, 7, 1, 4].

     

    思路

     可以发现他的操作次数就是n div 2嘛,

    很明显,第i个只能和第n-i+1个交换【对称】

    对于第i个和第j个,假设有若干步骤会交换他们俩【j=n-i+1】

    当改动区间i..j,此时就是有交换i和j的位置中的若干步骤的最后一步,

    那么如果操作的步数是偶数,就换来换去还是换回来啦,所以保持不变

    奇数自然交换过来就可以

     

    代码

     1 program test;
     2 var
     3   n,i,tmp:Longint;
     4   a:array[1..200000] of longint;
     5 
     6 begin
     7 
     8    readln(n);
     9    for i:= 1 to n do
    10     read(a[i]);
    11    for i:= 1 to n div 2 do
    12    if odd(i) then
    13     begin
    14       tmp:=a[i];
    15       a[i]:=a[n-i+1];
    16       a[n-i+1]:=tmp;
    17     end;
    18    for i:= 1 to n do write(a[i],' ');
    19 end.

     

  • 相关阅读:
    POJ 2672 Tarjan + 缩点 + 拓扑思想
    HDU1269迷宫城堡(裸Tarjan有向图求强连通分量个数)
    Tarjan求有向图强连通详解
    Jedis源代码探索
    多线程下使用Jedis
    Jedis分片连接池
    Jedis使用过程中踩过的那些坑
    jedis提纲
    jedis中的一致性hash算法
    字典:dict.c/dict.h
  • 原文地址:https://www.cnblogs.com/bobble/p/6361884.html
Copyright © 2011-2022 走看看