AcWing83场周赛题解

第一题、奇偶

题目链接:https://www.acwing.com/activity/content/problem/content/7862/

比较麻烦(本人做法)
找出不同字符个数,再判断。

#include<iostream>

using namespace std;
#define N 10005
int fun(char* str)
{
char *p;
char ch[N]={NULL};
int count=0,i,flag=0;
for(p=str;*p!='\0';p++)
{
flag=0;
for(i=0;i<count;i++)
{
if(ch[i]==*p) flag=1;
}
if(flag==0) ch[count++]=*p;
}
return count;
}
int main()
{
char str[N]={NULL};
int num;
cin>>str;
num=fun(str);
num%2==0?cout<<"even":cout<<"odd";
}

第二题、闯关

题目链接:https://www.acwing.com/activity/content/problem/content/7863/

 题目自行脑补。

特殊关卡肯定放到最后判断,还要倒排,才能保证最大!(详细看代码)
还要+long long,不然过不了

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define int long long
int b[10005],t,sum,v[1005];//b是特殊关卡,v是输入编号
signed main()
{
int n,m;
cin>>n>>m;
int a[10005];//各个关卡的只因数
for(int i=1;i<=n;i++) {
cin>>a[i];sum+=a[i];//求和
}
for(int i=1;i<=m;i++) {
cin>>v[i];
sum-=a[v[i]];//把有特殊只因的删去
t++;
b[t]=a[v[i]];//加入只因家族行列
}
sort(b+1,b+1+t);//看看谁是只因王
for(int i=t;i>=1;i--){//倒排,才能最大!
if(sum>b[i]){//题目模拟
b[i]=sum;
sum+=b[i];
}
else sum+=b[i];
}
cout<<sum<<endl;
return 0;
}

第三题、构造序列

题目链接:https://www.acwing.com/activity/content/problem/content/7864/

仅给出思路:

我们可以把前两个二元组减到极限,然后后面的gcd都是1(摆烂二元组)。

posted @ 2022-12-26 08:40  StudyingFaher  阅读(21)  评论(0)    收藏  举报