文章目录
- A. Dora's Set
- 题意:
- 思路:
- 代码
- B. Index and Maximum Value
- 题意:
- 思路:
- 代码:
- C. Dora and C++
- 题意:
- 思路:
- 代码:
题目链接
A. Dora’s Set
题意:
给你一个区间,从区间内选择3个数使两两的最大公约数为1,每个数只能用一次
思路:
我们找规律可以发现只要两个奇数加中间的偶数这3个数就可以满足条件,所以就可以先统计区间奇数的个数,最终结果就是奇数除2
代码
#include <bits/stdc++.h>
#define lowbit(x) ((x)&(-x))
#define int long long
#define endl '\n'
#define PII pair<int,int>
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;signed main()
{IOSint T=1;cin>>T;while(T--){int l,r,sum=0,t=0;cin>>l>>r;while(l<=r){if(l%2==1)sum++;l++;}cout<<sum/2<<endl;}return 0;
}
B. Index and Maximum Value
题意:
给你一个数组,给你一个区间,如果数组里面值满足区间,就进行加1或减1操作
思路:
我们只需要找到原始数组里面的最大值,如果最大值在区间,就改变最大值加1或减1最后输出就最大值就好了
代码:
#include <bits/stdc++.h>
#define lowbit(x) ((x)&(-x))
#define int long long
#define endl '\n'
#define PII pair<int,int>
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;signed main()
{IOSint T=1;cin>>T;while(T--){int l,r,ma=0,a,m,n;cin>>m>>n;char s;for(int i=1;i<=m;i++){cin>>a;if(a>ma)ma=a; }while(n--){cin>>s>>l>>r;if(ma>=l&&ma<=r){if(s=='+')ma+=1;elsema-=1;}cout<<ma<<" ";}cout<<endl;}return 0;
}
C. Dora and C++
题意:
给你一个数组,还有a,b,每次可以给数组里面的值加a或b求极差的最小值
思路:
一开始我这个题也没有思路,但经过大量的找规律,就发现a和b的最大公约数与这个题有关,所以就找到了一种规律吧,先求一下a和b的最大公约数,然后把数组求余最大公约数,再把数组排序,让mi等于极差,然后再遍历一下数组,把m[i]加最大公约数减m[i+1]与mi求最小值,最后mi就是结果。
代码:
#include <bits/stdc++.h>
#define lowbit(x) ((x)&(-x))
#define int long long
#define endl '\n'
#define PII pair<int,int>
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int m[201000];
signed main()
{IOSint T=1;cin>>T;while(T--){int n,a,b,mi=0,p=0;cin>>n>>a>>b;int t=__gcd(a,b);//cout<<t<<endl;for(int i=1;i<=n;i++){cin>>m[i];m[i]%=t;//cout<<m[i]<<" ";}sort(m+1,m+1+n);mi=m[n]-m[1];for(int i=1;i<n;i++){if(m[i]+t-m[i+1]<mi)mi=m[i]+t-m[i+1];}//cout<<endl;//sort(m+1,m+1+n);//cout<<m[n]<<" "<<m[1]<<endl;cout<<mi<<endl;}return 0;
}