码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 764 A-B

时间:2017-02-03 00:36:43      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:字符串包含   第一个   多少   步骤   begin   cal   int   his   test   

 

翻译略戳,轻喷。。。

 

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.

 

 

Codeforces 764 A-B

标签:字符串包含   第一个   多少   步骤   begin   cal   int   his   test   

原文地址:http://www.cnblogs.com/tonylim/p/6361884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!