Codeforces Round #651 (Div. 2) A Maximum GCD、B GCD Compression、C Number Game、D Odd-Even Subsequence
A. Maximum GCD
题意:
t组输入,然后输入一个n,让你在区间[1,n]之间找出来两个不相等的数a,b。求出来gcd(a,b)(也就是a,b最大公约数)。让你求出来最大的gcd(a,b)是多少。
题解:
最大gcd(a,b),那就是n/2向下取整的结果。因为如果gcd(a,b)越大,那么a/gcd(a,b)或者b/gcd(a,b)的值肯定越小,最小也就是2了,所以输出n/2就行
代码:

1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string>
5 #include<queue>
6 #include<string.h>
7 #include<map>
8 #include <iostream>
9 #include <math.h>
10 using namespace std;
11 typedef long long ll;
12 int main()
13 {
14 int t;
15 scanf("%d",&t);
16 while(t--)
17 {
18 int n;
19 scanf("%d",&n);
20 printf("%d\n",n/2);
21 }
22 return 0;
23 }
B. GCD Compression
题意:
t组输入,你首先有一个长度为2*n的数组,你需要压缩a数组长度为n-1。你可以扔掉a数组中的两个元素,将剩下的元素两两一组相加,它的值作为新数组b的一个值。你需要保证这个新数组b的gcd大于1(即,gcd(b1,b2...b(n-1) >1)
题解:
刚开始不知道怎么写,如果考虑所有因子那就不好弄了。但是题目上面说了,你只需要保证你构造的新数组b的公共最大公因子大于1就行,那么我们取他们的因子里面至少包含2这个因子。包含2这个因子的话,只要新数组的值都是偶数就可以满足题意(因为他们至少有一个公因子2,而这个2都大于1.所以肯定会满足题意)。那么我们就只要能构造一个都是偶数的新数组就行。偶数+偶数、奇数+奇数、就这样凑肯定可以。因为我们还可以丢弃两个元素,如果a数组的偶数个数为奇数就把扔掉一个,同样如果a数组的奇数个数为奇数就把扔掉一个。
代码:

1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string>
5 #include<queue>
6 #include<string.h>
7 #include<map>
8 #include <iostream>
9 #include <math.h>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=2e3+10;
13 int que1[maxn],que2[maxn],index1,index2;
14 int main()
15 {
16 int t;
17 scanf("%d",&t);
18 while(t--)
19 {
20 index1=index2=0;
21 int n;
22 scanf("%d",&n);
23 for(int i=1;i<=2*n;++i)
24 {
25 int x;
26 scanf("%d",&x);
27 if(x%2)
28 {
29 que1[index1++]=i;
30 }
31 else que2[index2++]=i;
32 }
33 for(int i=1;i<index1;)
34 {
35 if(n==1)
36 break;
37 printf("%d %d\n",que1[i-1],que1[i]);
38 n--;
39 i+=2;
40 }
41 for(int i=1;i<index2;)
42 {
43 if(n==1)
44 break;
45 printf("%d %d\n",que2[i-1],que2[i]);
46 n--;
47 i+=2;
48 }
49 }
50 return 0;
51 }
C. Number Game
题意:
对于一个n,你可以从下面两种操作中选一种执行
1、将n除于它的奇数因子(它的因子不包括1但是包括它本身)
2、将n减去1
上面两种操作的前提都是n大于1.
如果谁没有办法执行操作,那么谁就输了
第一步由Ashishgup先走
题解:
1、特判
n==1的时候对方必胜
n==2的时候Ashishgup必胜
2、如果n是一个奇数,那么Ashishgup必胜。因为n可以执行操作1除于n的因子n本身
3、如果n为偶数,且有奇数因子,我们一定可以把n拆为一个奇数和一个没有奇数因子(除1外)的偶数相乘,这样Ashishgup留给对手的就是一个没有奇数因子的偶数x,对手只能做减一操作,如果x不为2,那么Ashishgup就得到一个奇数,直接除以自身即可,此时Ashishgup必胜。否则就输了。
所以我们只需要找出来n的最大奇数因子,然后判断一下n除于这个最大奇数因子的值等不等于2就行
代码:

1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string>
5 #include<queue>
6 #include<string.h>
7 #include<map>
8 #include <iostream>
9 #include <math.h>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=2e3+10;
13 int result(int n)
14 {
15 int ans=0;
16 for(int i=2; i<=n/i; ++i)
17 {
18 if(n%i==0)
19 {
20 if(i%2 && n/i!=2)
21 ans=max(ans,i);
22 if((n/i)%2 && i!=2)
23 ans=max(ans,n/i);
24 // if(i!=2 && n/i!=2)
25 // {
26 // if(i%2==1 || (n/i)%2==1)
27 // {
28 // return true;
29 // }
30 // }
31 }
32 }
33 if(ans) return 1;
34 return 0;
35 }
36 int main()
37 {
38 int t;
39 scanf("%d",&t);
40 while(t--)
41 {
42 int n;
43 scanf("%d",&n);
44 if(n%2)
45 {
46 if(n==1)
47 {
48 printf("FastestFinger\n");
49 }
50 else printf("Ashishgup\n");
51 }
52 else
53 {
54 int ans=result(n);
55 //printf("%d***\n",ans);
56 if(n==2)
57 {
58 printf("Ashishgup\n");
59 }
60 else if(ans)
61 {
62 printf("Ashishgup\n");
63 }
64 else printf("FastestFinger\n");
65 }
66 }
67 return 0;
68 }
D. Odd-Even Subsequence
题意:
给你一个长度为n的数组v,你需要把它的长度缩减为k。缩减操作就是删除v数组中的某个位置的元素。注意元素下标从1开始,而且你只能删除某个位置的元素,并不能改变它们的顺序。我们设我们操作过后长度为k的数组为a,那么我们设这个数组所有奇数下标所对应的值中最大的那个值为x,我们设这个数组所有偶数下标所对应的值中最大的那个值为y,我们只需要输出min(x,y)就行。我们要尽量使输出的值尽量小
题解:
答案具有单调性,二分答案,然后看能不能满足有大于等于k个元素满足条件。因为我们最后输出的是min(x,y),所以只要偶数下标的满足那个答案,或者奇数下标的满足答案就行。
这里对偶数下标满足答案为例:
假设偶数下标所对应的值中最大的那个值小于等于答案,那么我们取第一个元素就直接取原数组的第一个,然后取第二个元素就要满足那个元素的值要小于等于二分的答案。第三个值就取我们去第二个元素后面那个就行。具体见代码
代码:

1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string>
5 #include<queue>
6 #include<string.h>
7 #include<map>
8 #include <iostream>
9 #include <math.h>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=2e5+10;
13 int n,k,a[maxn];
14 bool check(int x,bool flag)
15 {
16 int cnt=0;
17 for(int i=1; i<=n; i++)
18 {
19 if(flag||a[i]<=x)
20 {
21 cnt++;
22 flag=!flag;
23 }
24 }
25 return cnt>=k;//��û��k������������Ԫ��
26 }
27 int main()
28 {
29 scanf("%d%d",&n,&k);
30 for(int i=1; i<=n; i++)
31 {
32 scanf("%d",&a[i]);
33 }
34 int l=1,r=1e9,ans;
35 while(l<=r)
36 {
37 int mid=(l+r)/2;
38 if(check(mid,0)||check(mid,1))
39 {
40 ans=mid;
41 r=mid-1;
42 }
43 else
44 {
45 l=mid+1;
46 }
47 }
48 printf("%d\n",ans);
49 return 0;
50 }
51
Codeforces Round #651 (Div. 2) A Maximum GCD、B GCD Compression、C Number Game、D Odd-Even Subsequence的更多相关文章
- Codeforces Round #651 (Div. 2) A. Maximum GCD(数论)
题目链接:https://codeforces.com/contest/1370/problem/A 题意 有 $n$ 个数大小分别为 $1$ 到 $n$,找出两个数间最大的 $gcd$ . 题解 若 ...
- Codeforces Round #651 (Div. 2) A. Maximum GCD (思维)
题意:在\(1\)~\(n\)中找两个不相等的数使得他们的\(gcd\)最大. 题解:水题,如果\(n\)是偶数,那么一定取\(n\)和\(n/2\),\(n\)是奇数的话,取\(n-1\)和\((n ...
- Codeforces Round #172 (Div. 2) D. Maximum Xor Secondary 单调栈应用
http://codeforces.com/contest/281/problem/D 要求找出一个区间,使得区间内第一大的数和第二大的数异或值最大. 首先维护一个单调递减的栈,对于每个新元素a[i] ...
- Codeforces Round #651 (Div. 2) B. GCD Compression(数论)
题目链接:https://codeforces.com/contest/1370/problem/B 题意 给出 $2n$ 个数,选出 $2n - 2$ 个数,使得它们的 $gcd > 1$ . ...
- Codeforces Round #651 (Div. 2) B. GCD Compression (构造)
题意:有一个长度为\(2n\)的数组,删去两个元素,用剩下的元素每两两相加构造一个新数组,使得新数组所有元素的\(gcd\ne 1\).输出相加时两个数在原数组的位置. 题解:我们按照新数组所有元素均 ...
- Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序
B. Maximum Submatrix 2 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...
- Codeforces Round #276 (Div. 1) B. Maximum Value 筛倍数
B. Maximum Value Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/484/prob ...
- Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)
E. Maximum Matching 题目链接:https://codeforces.com/contest/1038/problem/E 题意: 给出n个项链,每条项链左边和右边都有一种颜色(范 ...
- Codeforces Round #276 (Div. 1)B. Maximum Value 筛法
D. Maximum Value You are given a sequence a consisting of n integers. Find the maximum possible ...
随机推荐
- 天梯赛练习 L3-016 二叉搜索树的结构 (30分)
题目分析: 用数型结构先建树,一边输入一边建立,根节点的下标为1,所以左孩子为root*2,右孩子为root*2+1,输入的时候可用cin输入字符串也可用scanf不会超时,判断是否在同一层可以判断两 ...
- SQL Server解惑——查询条件IN中能否使用变量
在SQL Server的查询条件中,能否在IN里面使用变量呢? 如果可以的话,有没有需要注意的地方或一些限制呢?在回答这个问题前,我们先来看看这个例子: IF EXISTS (SELECT 1 FRO ...
- springboot 和 mongdb连接问题 Exception in thread "main" com.mongodb.MongoSecurityException:
1 Exception in thread "main" com.mongodb.MongoSecurityException: Exception authenticating ...
- 【Linux】md5sum 生产所有文件的md5值,并对照目标文件是否相同
现在加入有很多很多文件需要测试md5,想看下是否都传输成功了,如何批量生成文件的md5并且逐条对照呢? 下面来简单介绍下 md5sum这个命令有一个选项"-c" 这个选项的意思是c ...
- 分布式系统:xxl-job改造spring-cloud
目录 改造原因 主要改造思路 调度中心 调度中心 执行器侧 总结 修改后的源码仓库地址:GitHub. : 改造原因 原有的xxl-job使用自己实现的http协议进行注册以及调度等,与目前框架中本身 ...
- centos7安装vsftpd最大的坑
1.检查用户和密码没有错误2.vsftpd.conf配置没有错误3.检查/etc/vsftpd/vsftpd.conf 里面pam_service_name =vsftpd4.终极boss查看vim ...
- Spring-AOP为类增加新的功能
适配器的简单应用实现: 比如:有一个类Car,在类中有两个属性一个为汽车名name,另一个为速度speed.其行为为run(). 现在有一辆车BMWCar 增加了GPS功能.如下实现: 基本类: pu ...
- MySQL中UPDATE语句里SET后使用AND的执行过程和结果分析
使用SQL中的UPDATE关键字更新多个字段值时,SET后面的更新字段应该使用逗号而不能用AND.虽然用AND不会报错,但会使更新结果错误,下面我将通过场景来分析当我们使用AND时SQL的执行过程和为 ...
- 性能测试WAS内存使用的探索和分析
性能测试中,CPU和内存是关注最多的两个性能指标.以我行应用最多的系统架构(WAS+Oracle)来说,CPU使用率高的问题多发生于数据库,比如索引不当引发的表扫描.绑定变量使用不当引发的硬解析.连接 ...
- 【pytest】(十)fixture参数化-巧用params和ids优雅的创建测试数据
我们都知道参数化. 比如我要测试一个查询接口/test/get_goods_list,这个接口可以查询到商品的信息. 在请求中,我可以根据请参数goods_status的不同传值,可以查询到对应状态的 ...