Comet OJ - Contest #7 解题报告
Posted doublebit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Comet OJ - Contest #7 解题报告相关的知识,希望对你有一定的参考价值。
传送门:https://www.cometoj.com/contest/52
A:签到题
题意:多次询问,每次询问给出一个值域区间[l,r],从这区间范围中选出两个整数(可重复),依次求出这俩数的“最大的最小公倍数”、“最小的最小公倍数”、“最大的最大公约数”、最小的最大公约数。
分析:(1)显然,当区间长度为1时,该问题的答案只能是区间中仅有的那个数。
(2)当区间的长度大于1时,最大的最小公倍数,lcmmax =lcm(ar,ar-1) = ar * ar-1;
最小的最小公倍数,lcmmin = lcm(al,al) = al;
最大的最大公约数,gcdmax = gcd(ar,ar) = ar;
最小的最大公约数,gcdmin = gcd(ar,ar-1) = 1;
1 #include <bits/stdc++.h>
2
3 using namespace std;
4
5 int main()
6 int t;
7 scanf("%d",&t);
8 while (t--)
9 int l,r;
10 scanf("%d%d",&l,&r);
11
12 if (l == r)
13 printf("%d %d %d %d\n",l,l,l,l);
14 else
15 printf("%lld %d %d %d\n",(long long)r*(r-1),l,r,1);
16
17
18
19 return 0;
20
B:麻将题
题意:4个人(编号为1~4)围成一个环,相邻两人可以交换位置。现按逆时针顺序给出环上的编号,代表4人在桌上的位置关系。求最少需要交换多少次位置才能满足1的下一个元素是2,2的下一个元素是3,3的下一个元素是4,4的下一个元素是1。
分析:由于环上只有4个元素,交换次数最多不会超过2次,因此我们可以考虑直接枚举情况。
(1)假如这个序列一开始就满足条件,最少交换次数为 0。
(2)假如这个序列的位置关系为(1,4,3,2),最少交换次数为 2。
(3)其余情况最少交换次数均为 1。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main() 6 int num[4],pos = 0; 7 for (int i=0;i<4;i++) 8 scanf("%d",&num[i]); 9 if (num[i] == 1) 10 pos = i; 11 12 13 int arr[4]; 14 int pick[4] = 1,4,3,2; 15 bool two = true; 16 for (int i = 0;i<4;i++) 17 arr[i] = num[pos]; 18 pos = (pos + 1)%4; 19 if (arr[i] != pick[i]) 20 two = false; 21 22 23 24 if (two) 25 puts("2"); 26 else 27 int i = 1; 28 for (;i<4;i++) 29 if (arr[i] != arr[i-1] + 1) 30 break; 31 32 33 if (i == 4) 34 puts("0"); 35 else 36 puts("1"); 37 38 39 40 return 0; 41
以上是关于Comet OJ - Contest #7 解题报告的主要内容,如果未能解决你的问题,请参考以下文章