NC16745. 低位值
描述
输入描述
n以二进制形式给出,一行一个二进制01串n,表示l,r的上界。
1 <= 字符串n的长度 <= 20,000
数据保证没有前缀0。
输出描述
一行一个整数表示答案。
示例1
输入:
11
输出:
2
说明:
二进制串“11”对应的十进制数为“3”C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 488K, 提交时间: 2019-06-27 13:32:30
#include<bits/stdc++.h> using namespace std; string s; int main() { cin >> s; int ans = 0, cnt = 0; for (int i = 1; i < s.size(); ++i) if(s[i] == '1') ans = max(ans, (int)s.size()-i-1); for (int i = 0; i < s.size(); ++i) if(s[i] == '1') ++cnt; ans = max(ans, cnt-1); ans +=(s.size()-1)*s.size()/2; if(s.size()==1 && s[0] == '1') ans = 1; cout << ans << endl; return 0; }
Python(2.7.3) 解法, 执行用时: 24ms, 内存消耗: 3660K, 提交时间: 2018-06-23 17:08:53
import sys s = sys.stdin.readline().strip() n = len(s) if n == 1: print 1 sys.exit(0) l = [int(x) for x in list(s)] b = sum(l) - 1 f = n - 1 for i in range(1, n): if l[i] == 0: continue if n-i==b: f = i-1 break else: f = i break a = n - f - 1 res = a + n*(n-1)/2 print res#int(s, 2), ''.join(map(str, l)), res
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 496K, 提交时间: 2020-04-24 22:38:53
#include<iostream> using namespace std; int main() { string ch; cin>>ch; int sum=0,num=0; int len=ch.size(); for(int i=1;i<=len&&!sum;i++) if(ch[i]=='1') sum=len-i; for(int i=len-1;i>=0&&!num;i--) if(ch[i]=='0'||i==0) num=len-i; cout<<max(sum,num)+max(0,len*(len-1)/2-1); }