首页 > 其他分享 >Codeforces1 #879 div.2

Codeforces1 #879 div.2

时间:2023-06-19 09:33:20浏览次数:36  
标签:10 879 int s2 s1 cin Codeforces1 res div.2

第一次参加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;
}

 

标签:10,879,int,s2,s1,cin,Codeforces1,res,div.2
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17490292.html

相关文章

  • Codeforces Round 877 (Div.2) 题解 A - D
    A.BlackboardList题目大意起初黑板上有两个数,现在不断选取两个数作出他们俩差的绝对值并写在黑板上,如此往复直到黑板上有\(n\)个数。现在给定这\(n\)个数,问起初两数的其中一个数是多少。解题思路我们分两种可能:要么这两个数有负数,要么没有。有负数的情况,因为每次写下......
  • BestCoder Round #71 (div.2)1001KK's Steel
    题意:中文题思路:其实我们不去考虑N,我们只考虑最优切割策略:     首先肯定是尽量的小即1、2     既要不相等,又不能构成三角形,即每次为当前数列中最大的两项的和     那么,构成的数列为1,2,3,5,8,......     这样我们只要求最接近且小于等于N的......
  • ACM-CodeForces-#685(Div.2)
    A.SubtractorDivide#include<iostream>usingnamespacestd;intmain(){ intT,n; cin>>T; while(T--) { cin>>n; if(n<=3) n--; else n=2+(n&1); cout<<n<<endl; } return0;}B.Non-SubstringSubsequence#in......
  • 【LGR-141-Div.2】洛谷 6 月月赛 I (前两题)
    T1:金盏花传送门直接暴力枚举前6位的值即可,记得开longlong#include<bits/stdc++.h>usingnamespacestd;#defineintlonglonginty,z,ans=1e18;signedmain(){ scanf("%lld%lld",&y,&z); for(inti=100000;i<=999999;i++){ intx=i*1000000+y; ans=min......
  • cf-div.2-875d
    链接:https://codeforces.com/contest/1831/problem/D脑子确实不好使,没啥思路,看jls代码之后豁然开朗。思路:先枚举约数s,因为\(b_i+b_j\)不会超过4e5,所以第一层枚举所有约数为根号级别,第二层循环里枚举所有对数,统计\(v=a_i*s-b_i\)的所有个数,只有当\(a_i\)的值与s的值相等时,才能......
  • CodeForces1061C Multiplicity
    题面翻译从序列\(\{a_1,\a_2,\..\,\a_n\}\)中选出非空子序列\(\{b_1,\b_2,\..\,\b_k\}\),一个子序列合法需要满足\(\forall\i\in[1,\k],\i\|\b_i\)。求有多少互不相等的合法子序列,答案对\(10^9+7\)取模。序列\(\{1,\1\}\)有\(2\)种选法得到子序列\(......
  • 【题解】Luogu[P1879] [USACO06NOV]Corn Fields G
    Link→状压dp典题,看数据范围就能多半猜到是状压。\(M\)行\(N\)列很不舒服,本篇题解规定为\(N\)行\(M\)列。因为说没有哪两块草地相连,我们不妨一行一行考虑,一行中每格只可能是\(0\)或\(1\),所以一行的总不同状态数是\(2^M\)。我们用二进制表示每一行的状态,对于每一行,暴......
  • CF R870 div.2
    C 输出"NO"的充要条件是要在最初就选择\(k\)个物品,使得\(k\midN\)。发现朴素做法是\(O(TM)\),可以对\(N\)的约数进行枚举,优化为\(O(T\sqrt(N))\),再特判\(N\leqM\)和\(N=1\)的情况。#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;int......
  • Codeforces Round 869 (Div.1 & Div.2) 题解
    2A.Politics因为编号为\(1\)的人一定不会离开,那么最后留下的人一定要和编号为\(1\)的人的所有参数都一致,所以计数即可。#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>u......
  • CF R868 (div.2)
    A.A-characteristic题意:构造1|-1数列,使数组中两两相乘值为1的对数为k思路:显而易见与1|-1的出现顺序无关,总结规律易知当1数量为2时对数为一,3时对数为3(1+(3-1)),4时对数为6(3+(4-1)),-1同理,数据量较小,枚举个数即可1#include<bits/stdc++.h>23usingnamespacestd;4intans[1......