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.

 

原文地址:https://www.cnblogs.com/bobble/p/6361884.html