A Good Pairs
题意题解略。
自己码代码能力有待提升。
#include<bits/stdc++.h>
#define ll long long
#define sc scanf
#define pr printf
using namespace std;
const ll maxn=2e5+10;
int a[maxn];
int main()
{
int t;cin>>t;
while(t--){
int n;sc("%d",&n);
int mmin=INT_MAX,mi=0;
int mmax=INT_MIN,mj=0;
int x;
for(int i=1;i<=n;i++){
sc("%d",&x);
if(mmin>x){
mmin=x;
mi=i;
}
if(mmax<x){
mmax=x;
mj=i;
}
}
pr("%d %d\n",mi,mj);
}
return 0;
}
B - Subtract Operation
题意:略
题解:当剩下最后两个数的时候,其他的数对最后两个数的影响是一样的。所有最后就是看它俩的差会不会存在k了。
直接暴力肯定会爆啊,哪个大怨种会直接投啊,不会是我吧
那怎么处理呢?我用的是sort+二分查找某数+k是否存在。
然后下意识以为如果找不到返回的是最后一个的下一个,我昨天脑子里有坑
看了下官方题解,是用了sort加双指针,附在后面。
#include<bits/stdc++.h>
#define ll long long
#define sc scanf
#define pr printf
using namespace std;
const ll maxn=2e5+10;
int a[maxn];
int main()
{
int t;cin>>t;
while(t--){
int n,k;sc("%d%d",&n,&k);
for(int i=0;i<n;i++)sc("%d",&a[i]);
sort(a,a+n);
for(int i=0;i<n;i++){
int now=a[i]+k;
int ans=lower_bound(a,a+n,now)-a;
if(ans!=n&&a[ans]==now){
pr("yes\n");
goto ans;
}
}
pr("no\n");continue;
ans:1;
}
return 0;
}
}
官方:
C. Make Equal With Mod
题意:
对每一个数进行操作(对大于二的数求余,替代原来的数)。最后使数全一样。
题解:
觉得这题比B简单。
判断两点
1》如果说数组中出现1了,那么这个1将无法再进行操作,需要把其他数全变成1。而如果出现相邻的数,可知如何也不能变成全为1。
2》没有出现1的话,对数组所有数从最大开始求余即可得到全为0的数组,一定满足题意。
#include<bits/stdc++.h>
#define ll long long
#define sc scanf
#define pr printf
using namespace std;
const ll maxn=1e5+10;
int a[maxn];
int main()
{
int t;cin>>t;
while(t--){
int n;sc("%d",&n);
int f1=0;
for(int i=0;i<n;i++){
sc("%d",&a[i]);
if(a[i]==1)f1=1;
}
if(f1!=1){
pr("yes\n");continue;
}
sort(a,a+n);
int f=0;
for(int i=0;i<n-1;i++){
if(a[i+1]-a[i]==1){
f=1;break;}
}
if(f!=1){
pr("yes\n");continue;
}
pr("no\n");
}
return 0;
}
D. K-good
题意:
一个数如果可以由k个对k求余但余数各不相同的和组成,输出k。
否则输出-1.
题解:
推公式、公式懒得写了,附上朋友题解
https://blog.csdn.net/m0_56535442/article/details/123776766?spm=1001.2014.3001.5502