12.30
打了cf的比赛
b题:
整体思路:一大一小的放可以保证最大值加最小值是1+n。
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
typedef long long ll;
using namespace std;
int p[200005];
ll a[200005];
int main(){
ll t;
cin>>t;
while(t--){
ll n,k;
cin>>n>>k;
if(k!=1){
for(int i=1;i<=n/2;i++) cout<<n-i+1<<" "<<i<<" ";
if(n%2!=0) cout<<n/2+1<<" ";
cout<<endl;
}
else {
for(int i=1;i<=n;i++) cout<<i<<" ";
cout<<endl;
}
}
}
12.31
cf补题。
题目思路:这题想找到可行的x比较麻烦,所以反向思维,怎么才能确定那些数数不行的。所有数对质数取余如果每个余数都出现两个那么就是不行的。然后具体题解链接:Good Bye 2022: 2023 is NEAR C. Koxia and Number Theory_jikelk的博客-CSDN博客
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
typedef long long ll;
using namespace std;
ll zs[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
ll a[105];
int main(){
ll t;
cin>>t;
while(t--){
ll n;
cin>>n;
map<ll,ll>m1;
m1.clear();
int p=0;
for(int i=0;i<n;i++) {
cin>>a[i];
m1[a[i]]++;
if(m1[a[i]]>=2)p=1;
}
for(int i=0;i<15;i++){
map<ll,ll>m2;
m2.clear();
for(int j=0;j<n;j++){
ll tmp=a[j]%zs[i];
m2[tmp]++;
}
int p2=0;
for(int j=0;j<zs[i];j++){
if(m2[j]<2)p2=1;
}
if(p2==0) p=1;
}
if(p==1) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
}