CSDN竞赛第35期题解

Posted 酷酷的Herio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

以上是关于CSDN竞赛第35期题解的主要内容,如果未能解决你的问题,请参考以下文章

CSDN竞赛第32期题解

CSDN竞赛第28期题解

CSDN竞赛第28期题解

CSDN竞赛第27期题解

CSDN竞赛第27期题解

CSDN竞赛第33期题解