首页 > 其他分享 >(对结果分类讨论)牛客周赛 Round 1 C.游游的交换字符

(对结果分类讨论)牛客周赛 Round 1 C.游游的交换字符

时间:2024-07-02 17:53:19浏览次数:1  
标签:周赛 结果 int long i64 牛客 游游 using

题意:

思路:
观察发现相邻元素不同的结果只有两种,要么是101010101...要么是010101010,因此我们可以对结果分类讨论。直接模拟算出两种情况最少需要操作多少次,再取min即可。
需要注意的是,如果是奇数串,那么结果只有一种,数量多的一定要放两侧。

code:

#include <bits/stdc++.h>
#include<bits/extc++.h>
using namespace __gnu_pbds;
using namespace std;
using i64 = long long;
using u64 = unsigned long long;
using PII = pair<i64, i64>;
const int inf = 0x3f3f3f3f;
const i64 INF = 0x3f3f3f3f3f3f3f3f;
#define Z cout << "\n"
#define lb lower_bound
#define ub upper_bound
#define D(x) cerr << #x << ": " << (x) << "\n"
#define DV(v) cerr<<#v<<": ";for(int i=0;i<(v).size();i++)cerr<<((v)[i])<<",";cerr<<"\n"
#if 1
#define int i64
#endif
signed main() {
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    string s;
    cin >> s;
    int n = s.size();
    s = ' ' + s;
    char c = '0';
    if (n & 1) {
        if (count(s.begin() + 1, s.end(), '0') < count(s.begin() + 1, s.end(), '1'))c = '1';
    }
    vector<int>p;
    p.push_back(5959);
    for (int i = 1; i <= n; i++) {
        if (s[i] == c)p.push_back(i);
    }
    int sum1 = 0;
    for (int i = 1; i < p.size(); i++) {
        int z = 2 * i;
        if (z <= n)sum1 += abs(z - p[i]);
        else sum1 = inf;
    }
    int sum2 = 0;
    for (int i = 1; i < p.size(); i++) {
        int z = 2 * i - 1;
        if (z <= n)sum2 += abs(z - p[i]);
        else sum2 = inf;
    }
    cout << min(sum1, sum2);
    return 0;
}

标签:周赛,结果,int,long,i64,牛客,游游,using
From: https://www.cnblogs.com/iscr/p/18280304

相关文章

  • 牛客周赛 Round 44
    A题每三张删除一张,n/3就是答案点击查看代码#include<bits/stdc++.h>#defineall(x)(x).begin(),(x).end()#definefifirst#definesesecondusingi64=longlong;usingpii=std::pair<int,int>;template<typenameT>std::vector<T>read(T&n......
  • 牛客周赛 Round 49 (D~F)
    嘤嘤不想求异或喵think:首先l和r的范围有1e18,我们能要到要么是二分(但这题显然和二分无关),所以我们尝试打表找规律.打表发现x是4的倍数,1~x的异或和应该是x,同理其他也是有规律的.#include<bits/stdc++.h>#definefifirst#definesesecond#defineintlonglongusin......
  • 牛客周赛 Round 49
    A题按题目输出即可#include<bits/stdc++.h>#defineall(x)(x).begin(),(x).end()#definefifirst#definesesecond#definelowbit(x)(x)&(-x)usingi64=longlong;usingpii=std::pair<int,int>;voidsolve(){i64a,b;std::cin>......
  • 「蓝桥·算法双周赛」第 3 场 算法季度赛
    1.全国科普行动日【算法赛】#include<iostream>usingnamespacestd;intmain(){cout<<"6.29";return0;}2.A%B【算法赛】#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingi128=__int1......
  • 牛客周赛49
    比赛链接:牛客周赛49赛时感受A思路    代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintN=1e5+10;intmain(){lla,b;cin>>a>>b;cout<<a-b*11<<endl;return0;}B思路......
  • 牛客网最强Java面试八股文(2024年6月持续更新)
    一、Java基础1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,java开发工具包,提供了java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,java运行环境,为java的运行提供了所需环境。具体来说JDK其实包含了JRE,同时还包含了编译java源码的编译......
  • 牛客周赛 Round 47
    A、小红的葫芦水一篇代码实现#include<bits/stdc++.h>#ifdefLOCAL#include"algo/debug.h"#else#definedebug(...)42#endifintmain(){std::cin.tie(nullptr)->sync_with_stdio(false);intn=5;std::vector<int>a(n);fo......
  • 牛客周赛47 (待补F和思路)
    比赛链接:牛客周赛47赛时感受    又是一场思维题,应该只有EF有点算法,E需要使用快速幂和取余,F做不出,C卡了我一下,D写完了,E不写完一半又回来看C才做掉的,E也卡了很久虽然鸽巢原理想到了,但是没想到被卡在取余问题上,一开始没想出来,去做F然后做了半个小时发现做不掉,又回来在E上......
  • 牛客周赛 Round 47
    时刻多日没打竟然退步了 A.小红的葫芦思路:五个元素三个相同另外两个相同可以通过数组排序写也可以map等等方法很多Code:#include<bits/stdc++.h>usingnamespacestd;map<int,int>mp;intmain(){ios::sync_with_stdio(false);cin.tie(0);......
  • 116. 小欧的卡牌(卡码网周赛第十七期(23年oppo提前批B组笔试真题))
    116.小欧的卡牌(卡码网周赛第十七期(23年oppo提前批B组笔试真题))题目描述小欧有n张卡牌,第i张卡牌的正面写了个数字ai,背面写了个数字bi。小欧对于每张卡牌可以选择一面向上,她希望最终向上的数字之和为3的倍数。你能告诉小欧有多少方案吗?由于答案过大,请对10^9+7......