Good Bye 2022: 2023 is NEAR
出到C题,D稍微有点眉目但有个细节搞不明白,晚点补。
传送门
A. Koxia and Whiteboards
比较简单,优先队列搞下就行。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
vector<int> a, b;
int main() {
int T;
int tmp;
scanf("%d", &T);
while (T--) {
a.clear(),b.clear();
ll sum=0ll;
int n, m;
scanf("%d%d", &n, &m);
priority_queue<int,vector<int>,greater<int>>q;
for (int i = 0; i < n; i++) {
cin >> tmp;
a.push_back(tmp);
}
for (int i = 0; i < m; i++) {
cin >> tmp;
b.push_back(tmp);
}
for (int i = 0; i < n; i++) {
sum += ll(a[i]);
q.push(a[i]);
}
for(int i=0;i<m;i++){
sum-=q.top();
sum+=(ll)b[i];
q.pop();
q.push(b[i]);
}
printf("%lld\n",sum);
}
}
B. Koxia and Permutation
找规律
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int main() {
int T;
scanf("%d", &T);
while (T--) {
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i*2-1<n;i++)
{
printf("%d %d ",n-i+1,i);
}
if(n%2==1)
printf("%d\n",n/2+1);
}
}
C. Koxia and Number Theory
想好久,蛮有趣的。
看到余数互质第一反应中国剩余定理,不过没用上那个板子,刚好我也有点不会写了。
我爱递推法,先从小的数字入手看看找到规律了。
记得枚举[2,n/2]一开始没搞闭区间WA了一发。
其实要愿意枚举到n也可以AC。
思路见图,代码很简单的。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
typedef long long ll;
vector<ll> a;
set<ll> s;
#define INF 0x3f3f3f3f
int main() {
int T;
scanf("%d", &T);
while (T--) {
a.clear();
s.clear();
int n;
bool f = 1;
ll tmp;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%lld", &tmp);
s.insert(tmp);
a.push_back(tmp);
}
if (s.size() < n) {
f = 0;
}
for(int i=2;i<=n/2;i++){
map<ll,ll>mp;
ll minn = INF;
for(int j=0;j<n;j++){
mp[a[j]%i]++;
}
for(int j=0;j<i;j++){
if(minn>mp[j]) minn=mp[j];
}
if(minn>=2ll){
f=0;
}
}
if(f) printf("yes\n");
else printf("no\n");
}
}
D. Koxia and Game
大概知道一点皮毛思路,就是{a,b,c}都给弄成2个一样的,然后拿走那个不一样的,让对方没法选择只能选择拿出全序列。
如果ab本来就一样还好说,c可以n种。
ab不一样的情况不知道该怎么想,这个情况有点复杂,感觉要建图处理。细节还没有很清楚,晚点看下题解。