Codeforces1 #879 div.2

发布时间 2023-06-19 09:26:06作者: o-Sakurajimamai-o

第一次参加codeforces比赛,只能做出来俩题,第三个题思路也就一半一半,估计是想不出来的那种,赛后问了下带佬,把我思路添加了点,最终还是A了

争取稳过第三题!

//A
//统计1,-1出现的次数,然后如果-1是奇数,让他变成偶数,次数+1
//因为总乘积要是正1,然后再变-1为1,直到>=0为止,这里的-1每次都要+2,因为确保偶数性
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int t,n,m,a[N],res;
int main()
{
    cin>>t;
    while(t--){
        cin>>n;
        res=0;
        int num1=0,num2=0;
        for(int i=0;i<n;i++){
            cin>>a[i];
            if(a[i]<0) num2++;
            else num1++;
        }
        if(num2%2!=0&&num2!=0) num2--,num1++,res++;
        while(num1<num2) res+=2,num1+=2,num2-=2;
        cout<<res<<endl;
    }
    return 0;
}
//B
//int 128没什么用,就把两个字串串读进去,把短的字符串前导0
//然后找到第一个不相等的数,这个数和前面的数都是绝对值相减,这个数之后的都x9就可以了
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int t;
void print(__int128 num)
{
    if(num>9) 
        print(num/10);
    putchar(num%10+'0');
}
int main()
{
    cin>>t;
    while(t--){
        string s1,s2;
        __int128_t res=0;
        cin>>s1>>s2;
        if(s1==s2){
            cout<<0<<endl;
            continue;
        }
        if(s2.size()>s1.size()) swap(s1,s2);
        __int128_t x=s1.size()-s2.size();
        __int128_t tmp=s1.size();
        while(x--) s2.insert(0,1,'0');
        int i=0,pos;
        while(s1[i]==s2[i]) i++;
        for(int j=0;j<=i;j++) res+=abs(s1[j]-s2[j]);
        res+=(9*(s1.size()-i-1));
        print(res);
        cout<<endl;
    }
    return 0;
}
//c
//博弈论,如果是第二个,由于要先翻转,所以翻转统计s2的时候次数要加一,也就是在下面判断的时候更改一下
//我只想到了对s2进行变换,但是没想到s1也可以随着一起变,两者统计起来最小的次数就是最长总和
//由于alice是先手,所以两者取最小
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
string s1,s2;
long long t,res,n,ans;
int main()
{
    cin>>t;
    while(t--){
        cin>>n;
        res=0,ans=0;
        cin>>s1>>s2;
        if(s1==s2){
            cout<<0<<endl;
            continue;
        }
        for(int i=0;i<s2.size();i++) if(s1[i]!=s2[i]) ans++;
        if(ans==1){
            cout<<1<<endl;
            continue;
        }
        reverse(s1.begin(),s1.end());
        for(int i=0;i<s1.size();i++) if(s1[i]!=s2[i]) res++;
        if(res==0){
            cout<<2<<endl;
            continue;
        }
        long long tmp=0x3f3f;
        if(ans%2==1) tmp=min(tmp,ans*2-1);
        else tmp=min(tmp,ans*2);
        if(res%2==0) tmp=min(tmp,res*2-1);
        else tmp=min(tmp,res*2);
        cout<<tmp<<endl;
    }
    return 0;
}