翻译略戳,轻喷。。。
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
考虑第一个样例:
- 刚开始的数列是 [2, 3, 9, 6, 7, 1, 4].
- 第一次操作完是 [4, 1, 7, 6, 9, 3, 2].
- 第二次操作完 [4, 3, 9, 6, 7, 1, 2].
- 第三次操作完 [4, 3, 7, 6, 9, 1, 2].
- 第四次我们只需要翻转中间那个数, 所以并没改变啥.
最终结果 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.