CSDN竞赛第35期题解

CSDN竞赛第35期题解

1、题目名称:交换后的or

给定两组长度为n的二进制串,请问有多少种方法在第一个串中交换两个不同位置上的数字,使得这两个二进制串“或”的
结果发生改变?

int n;cin>>n;
string a,b;cin>>a>>b;
int cnt = 0;
//for(int i=0;i<n;i++) if(a[i]=='1') cnt++;
ll ans = 0;
int u,v,w,x=0;
u=v=w=x=0;
for(int i=0;i<n;i++){
    
    
if(a[i]=='1') u++;
else v++;
if(b[i]=='0'){
    
    
if(a[i]=='0') w++;
else x++;
}
}
ans = 1LL*v*x+1LL*u*w-x*w;
cout<<ans;
return 0;

2、题目名称:争风吃醋的豚鼠

N个节点两两建边。 不存在3个节点相互之前全部相连。(3个节点连接成环) 最多能建立多少条边?

ll n ;
cin>>n;
printf("%lld\n",n/2*(n-n/2));

3、题目名称:最长递增的区间长度

给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3

int n;cin>>n;
int ans =0,cnt=0;
rep(i,1,n){
    
    
cin>>a[i];
}
rep(i,1,n){
    
    
if(a[i]>a[i-1]){
    
    
cnt++;
}
else {
    
    
cnt = 1;
}
ans=max(ans,cnt);
}
cout<<ans;
return 0;

4、题目名称:因数-数字游戏

小Q的柠檬汁做完了。 掏出了自己的数字卡牌。 想要和别人做数字游戏。 可是她又不想要输掉游戏。 她制定好规则,轮
流出牌,每个人只能给出前1个人所出的牌的某个因子牌。 但是这个因子不能是1或者该数本身。 现在给出整数n。 两个
人开始做游戏,轮流给出上一张牌的某个因子牌,谁无法再给出因子牌则该人胜利,如果该整数无因子牌直接视为先手胜
利,请判断先手在最优策略状态下能否必胜。

int solution(long long n){
    
    
int result;
// TODO:
long long cnt = 0;
for(long long i=2;i*i<=n;i++){
    
    
if(n%i==0){
    
    
while(n%i==0){
    
    
n/=i;
cnt++;
}
}
}
if(n>1) cnt++;
if(cnt==0) return 1;
if(cnt==2) return 2;
return 1;
}
int main() {
    
    
long long n;
std::cin>>n;
int result = solution(n);
std::cout<<result<<std::endl;
return 0;

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/129458674