对于A
python
T = int(input())
for _ in range(T):
a,b,c,d = map(int, input().split())
if a == b ==c == d:
print("YES")
else:
print("NO")
难度在于读英语
对于B
python
q = int(input())
from collections import Counter
for _ in range(q):
t = int(input())
s,t = input().split()
if Counter(s) == Counter(t):
print("YES")
else:
print("NO")
对于C
python
T = int(input())
for _ in range(T):
n = int(input())
lst = list(map(int, input().split()))
ou = any(i%2 == 0 for i in lst)
ji = any(i%2 == 1 for i in lst)
if ji and ou:
print(*sorted(lst))
else:
print(*lst)
注意到一旦可以交换 ,那么可以任意交换,否则只能保持原来顺序。
对于D
python
# find = []
# zhi = [0 for _ in range(10**8+1)]
# for i in range(2,10**7 +1):
# if not zhi[i]:
# find.append(i)
#
# for j in range(i*i,10**7 +1,i):
# zhi[j] = 1
# # print(find[:10])
import math
# print(len(find))
t = int(input())
for i in range(t):
n = int(input())
lst = list(map(int, input().split()))
j = 2
while True :
r = False
for i in range(n):
if math.gcd(j,lst[i]) == 1:
print(j)
r = True
break
else:
j += 1
if r:
break
这题难度在于对复杂度的估计,因为要存在一个数没有该质因子,那么这个质因子必然小于等于
通过打表可得
python
find = []
zhi = [0 for _ in range(10**7+1)]
for i in range(2,10**7 +1):
if not zhi[i]:
find.append(i)
for j in range(i*i,10**7 +1,i):
zhi[j] = 1
# print(find[:10])
mul = 1
has = []
for i in range(2,10**7 +1):
if zhi[i]:
mul*=i
has.append(i)
if mul >= 10**18:
break
print(has)
这个值是26,所以放心地暴力扫就行。
对于E
最大最小想二分,设置前后两个0-mid,x +mid的哨兵,让放置在中间集中。
python
t = int(input())
for _ in range(t):
n,k,x = map(int,input().split())
lst = list(map(int,input().split()))
lst.sort()
def check(mid):
ls = [-mid] +lst[:] +[x +mid]
tmp = 0
for i in range(1,n +2):
tmp += max(0,(ls[i] - mid) - (ls[i-1] +mid ) +1)
return tmp >= k
l = -1
r = x +1
while l + 1 <r:
m = (l +r)>>1
if check(m):
l = m
else:
r = m
cnt = 0
ls = [-l] +lst[:] +[x +l]
res = []
for i in range(1,n +2):
for j in range(ls[i-1] +l,ls[i] - l +1 ):
res.append(j)
print(*res[:k])
cpp
#include <bits/stdc++.h>
using namespace std;
// int main() {
// ios::sync_with_stdio(false);
// cin.tie(nullptr);
// cout.tie(nullptr);
// int t;
// cin >> t;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin>>t;
// while (t--) {
// int n, k, x;
// cin >> n >> k >> x;
// vector<int> a(n);
// for (int &i : a) cin >> i;
// a.push_back(-1e9);
// a.push_back(1e9);
// n += 2;
while(t--){
int n,k,x;
cin>>n>>k>>x;
vector<int> a(n);
for (int &i:a) cin>>i;
a.push_back(-1e9);
a.push_back(1e9);
n += 2;
// sort(a.begin(), a.end());
// int l = 0, r = x + 1;
sort(a.begin(),a.end());
int l = 0,r = x + 1;
// while (l + 1 < r) {
// int m = (l + r) >> 1, f = 0;
// a[0] = - m, a[n - 1] = x + m;
// for (int i = 1; i < n; ++i) f += max(0, (a[i] - m) - (a[i - 1] + m) + 1);
// if (f >= k) l = m;
// else r = m;
// }
while ( l + 1 < r){
int m = ( l + r)>>1,f = 0;
a[0] = -m ,a[n-1] = x + m;
for (int i = 1;i < n;i ++){
f += max(0,(a[i] - m) - (a[i-1] + m) + 1);
}
if (f >=k) l = m;
else r = m;
}
// a[0] = - l, a[n - 1] = x + l;
// int j = 0;
// for (int i = 1; i < n; i++)
// for (j = max(j, a[i - 1] + l); j <= min((a[i] - l), x) && k; j++)
// cout << j << ' ', k--;
// cout << '\n';
a[0] = -l,a[n-1] = x + l;
int j = 0;
for (int i = 1; i < n; i++) {
for (j = max(j, a[i-1] + l); j <= min((a[i]-l), x) && k; j++) {
cout << j << ' ';
k--;
}
}
cout << '\n';
}
return 0;
}
慢慢加油。