https://ac.nowcoder.com/acm/contest/9981/F
这题可采用贪心的策略,如果两人答案相同,那么最多得两分,要么最少都不得分,如果两人答案不同,最多有一人是对的,最少没人得分,那最少肯定是0分。
#include<bits/stdc++.h>
using namespace std;
int maxn=-1,minn=99999999;
char a[1000],b[1000];
int ans=0,ans1=0;
int main() {
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
for(int i=1;i<=n;i++){
if(a[i]!=b[i])//不同答案
ans++;
else ans+=2;//相同答案
}
cout<<ans<<" "<<0<<endl;
return 0;
}
https://ac.nowcoder.com/acm/contest/9981/B
这道题偏思维点,显然()))))...这种形势是行不通的了。那么我们应该想到去分解这个K,我们发现左右括号有a*b=k这个规律,试了一下发现不行,
因为有大质数卡住了还是会超过他的范围,我们还能用平方数解决这个问题,任何一个数都可以表示成多个数的平方,比如5=1*1+2*2,先把平方数存进数组里(从小到大)
然后维护左右括号个数,初始第一个左右为0,则输出(,输出),第二数时,左括号为1,只需要再输出一个括号即可(就是和上次比较还差多少个左括号),右边直接输出)),没有影响。
#include<bits/stdc++.h>
using namespace std;
vector<int>q;
int main(){
int n,k;
cin>>n;
if(n==0){//非空串
cout<<")(";
return 0;
}
while(n){
k=sqrt(n);
n=n-k*k;
q.insert(q.begin(),k);
}
/* for(int i=0;i<q.size();i++){
cout<<q[i];
}
cout<<endl;*/
int temp=0,temp1;
for(int i=0;i<q.size();i++){
if(temp<q[i])
temp1=q[i]-temp,temp=q[i];//求差值,还要输出左括号的个数
else temp1=0;
while(temp1--)cout<<"(";
while(q[i]--)cout<<")";
}
return 0;
}
https://ac.nowcoder.com/acm/contest/9981/I
我们发现任意两个偶数都可以gcd>1,那么我们偶数能构造n/2-1对还差一个,就把6放到最后利用3的倍数刚好满足最多n/2个,然后相邻奇数一定互质,相邻的数也互质,那么后面按顺序排就可以了,一定是互质的。
#include <bits/stdc++.h>
using namespace std;
#define MAXN 1000006
typedef long long ll;
int vis[100005];
int main(){
int n,k,cnt=0,t;
cin>>n>>k;
if(k==0){//全都是互质的
for(int i=1;i<=n;i++){
cout<<i<<" ";
}
return 0;
}
if(n<6){//达不到k种的情况
if(k==n/2){
cout<<"-1";
return 0;
}
else{
for(int i=2;i<=n;i+=2){ //输出偶数
cout<<i<<" ";
vis[i]=1;//标记已经输出过了
cnt++;
if(cnt==k){
t=i;//这里是满足第k个的位置,为了好处理最后一个数
break;
}
}
cout<<t+2<<" ";//如果小于n/2,最后还得补一个
vis[t+2]=1;
for(int i=1;i<=n;i++){
if(!vis[i])
cout<<i<<" ";
}
}
}
else{
for(int i=2;i<=n;i+=2){
if(i==6){//为了把6放在最后
continue;
}
cout<<i<<" ";
vis[i]=1;
cnt++;
if(cnt==k){
t=i;
break;
}
}
if(n/2==k){
cout<<6<<" "<<3<<" ";
vis[6]=1;vis[3]=1;
}
else{
cout<<t+2<<" ";//如果小于n/2,最后还得补一个
vis[t+2]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i])
cout<<i<<" ";
}
}
return 0;
}