华为出的比赛?
好像是全站首个题解哎!
比赛链接:ABC342
Problem A:
稍微有点含金量的签到题。
#include <bits/stdc++.h>
using namespace std;
int main(){string S;cin>>S;for(int i=0;i<s.size();i++){if(count(S.begin(),S.end(),S[i])==1){//数有多少个字符cout<<find(S.begin(),S.end(),S[i])-S.begin()+1<<endl;//找它的位置return 0;}}
}
Problem B:
依然是签到题。
#include <bits/stdc++.h>
using namespace std;
int P[105];
int main(){int N;cin>>N;for(int i=0;i<N;i++){int p;cin>>p;p--;P[p]=i;}int Q;cin>>Q;while(q--){int A,B;cin>>A>>B;A--;B--;if(P[A]>P[B])swap(A,B);cout<<A+1<<endl;}return 0;
}
Problem C:
首先,要明确暴力是过不了的,所以必须优化。用一个数组记录改动信息,这样复杂度只有,因为一共就26个字母嘛。
#include <bits/stdc++.h>
using namespace std;
int to[26];
int main(){for(int i=0;i<26;i++)to[i]=i;int N;cin>>N;string S;cin>>S;int Q;cin>>Q;while(Q--){char c,d;cin>>c>>d;for(int i=0;i<26;i++){if(to[i]==c-'a')to[i]=d-'a';}}for(int i=0;i<n;i++)cout<<char('a'+to[S[i]-'a']);return 0;
}
感觉比以往的C简单一些。
Problem D:
数论题。我们知道,完全平方数的所有质因子的质数都是偶数(唯一分解定理),所以我们每次把除质因子p的平方,直到除不尽为止。最后还要特判一下0(它跟谁乘都是完全平方)。
#include <bits/stdc++.h>
using namespace std;
const int maxn=200005;
int A[maxn],cnt[maxn];
int main(){int N;cin>>N;for(int i=1;i<=N;i++)cin>>A[i];int ans=0,t=n-1;//十年OI一场空,不开long long见祖宗for(int i=1;i<=N;i++){for(int j=2;j<=A[i]/j;j++){while(A[i]%(j*j)==0)A[i]/=(j*j);}if(A[i]==0){ans+=t;t--;}else{ans+=cnt[A[i]];cnt[A[i]]++;}}cout<<ans<<endl;return 0;
}
ok,以上就是本期的全部内容。(up实力有限,只会A-D)我们下期再见!
友情提醒:本期的全部代码都有问题,请不要无脑Ctrl C+Ctrl V