NC257437. 游游的01串操作
描述
输入描述
一行仅由 '0' 、 '1' 组成的字符串,长度不超过 100000。
输出描述
一个整数,代表代价之和的最小值。
示例1
输入:
11101
输出:
2
说明:
示例2
输入:
0111111
输出:
13
说明:
C++(g++ 7.5.0) 解法, 执行用时: 5ms, 内存消耗: 536K, 提交时间: 2023-08-13 23:04:59
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5+10; char a[N]; int main() { ll x=0,y=0; cin>>a; for(int i=0;i<strlen(a);i++){ if(a[i]-'0'==i%2){ x+=(i+1); } else y+=(i+1); } cout<<min(x,y); return 0; }
Python3 解法, 执行用时: 89ms, 内存消耗: 4792K, 提交时间: 2023-08-14 10:13:20
s = input() ans1, ans2 = 0, 0 for idx, ch in enumerate(s): if idx % 2 == 0: if ch == '0': ans2 += idx + 1 else: ans1 += idx + 1 else: if ch == '0': ans1 += idx + 1 else: ans2 += idx + 1 print(min(ans1, ans2))
C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 512K, 提交时间: 2023-08-13 19:13:43
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=2e5+10; char s[N]; signed main(){ scanf("%s",s+1); int n=strlen(s+1); ll s1=0,s2=0; for(int i=1;i<=n;i++){ if((s[i]=='0')^(i&1))s1+=i; else s2+=i; } printf("%lld\n",min(s1,s2)); }
pypy3 解法, 执行用时: 79ms, 内存消耗: 21948K, 提交时间: 2023-08-13 19:40:49
s = input() # 1010 t1 = t2 = 0 for i in range(len(s)): j = i + 1 if j % 2: if s[i] == '0': t1 += j else: t2 += j else: if s[i] == '1': t1 += j else: t2 += j print(min(t1,t2))