慌慌张张开始了比赛,因为手残,A题wa了2次
A题题意很简单,就是让你从A数组中选出一个数B数组选出一个数,然后加起来看看俩个数组中有没有这个数
没有就输出相加的俩个数,直接数据结构set不解释好吧。
AC code
#include<bits/stdc++.h>
const int maxn = 105;
using namespace std;
int a[maxn],b[maxn],n,m;
set<int>q,q1;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
q.insert(a[i]);
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>b[i];
q1.insert(b[i]);
}
bool ok = false;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int x = a[i]+b[j];
if(q1.count(a[i]+b[j])==0&&q.count(a[i]+b[j])==0){
cout<<a[i]<<' '<<b[j]<<endl;
ok = true;
break;
}
}
if(ok) break;
}
return 0;
}
B 题 最大中位数,给我感觉是一个简单的思维,比赛时候啥也没想没看数据范围直接暴力TLE(QAQ)兔兔哭泣。
解题思路:因为我们要让中位数最大,所以对前面n>>1的数可以不用管,直接抛弃,然后我们每次让最小的数+到第二小看看可不可以加到如果不可以就把剩余的k平均分给最小数,如果可以加就加到第二小然后以此类推balabala就糊出来了
AC code
#include<bits/stdc++.h>
const int maxn = 2e5+10;
using namespace std;
typedef long long ll;
ll num[maxn],n,k;
ll res = 0;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>num[i];
sort(num+1,num+1+n,[](const int &a,const int &b){return a<b;});
ll res = num[n+1>>1];
int cnt = 1;
bool ok = true;
for(ll i = (n+1)/2+1;i<=n;i++){
if(cnt*num[i]-res>=k){
ok = false;
cout<<(res+k)/cnt<<endl;
break;
}
else{
cnt++;
res+=num[i];
}
}
if(ok) cout<<(res+k)/((n+1)>>1)<<endl;
return 0;
}
C 题 眨眼一看,我去!好难!这怎么写!其实仔细读题之后,会发现,此题就是找闭环过程,剩最后10分钟,糊出来了。
解题思路:因为在闭环上的点操作数都是一样的,1->2;2->3;3->4;4->1 他们的操作数都是一样的都是4,所以直接模拟就好啦。
AC code
#include<bits/stdc++.h>
const int maxn = 2e5+5;
using namespace std;
int a[maxn],q[maxn],res[maxn],n,t;
bool st[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) st[i] = false;
for(int i=1;i<=n;i++){
if(st[i]) continue;
int j = i,top = 1,cont = 0;
do{st[j]=true; j= a[j];q[top++] = j; cont++;} while(!st[j]);
for(int k = 1;k<top;k++) res[q[k]] = cont;
}
for(int i=1;i<=n;i++) cout<<res[i]<<' ';
cout<<endl;
}
return 0;
}
本次周赛体验良好~哈哈哈哈~
orz AKer
侥幸侥幸,,,%%%%%
我是 5 min A,C。然后 B 最后 1 min 想出正解没时间写了,,, /dk
我一开始A B然后一直不敢看C最后看懂了胡出来了