A. BowWow and the Timetable(思维)
题目链接:codeforces 1204A
题意:
城市从第1分钟开始, 每到4^k分钟的时候都有车离开, 现给出一个二进制串, 问在该时间到达城市, 已经离开了多少辆车 ?
题解:
字符串的长度除以2,如果字符串长度为奇数,判断后面还有没有1,如果有1 ,再加1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 5;
int main(){
string s;
cin >> s;
int len = s.size();
int ans = len / 2;
if(len % 2 == 1){
for(int i = 1; i < len; i++){
if(s[i] == '1'){
ans++;
break;
}
}
}
cout << ans << endl;
return 0;
}
B. Mislove Has Lost an Array(思维)
题目链接:codeforces 1204B
题意:
n个数,要求奇数只能为1,其他数要求ai / 2 存在于数组中(也就是说有 4 必有 2, 有8 必有 4),求最少L个数,最多R个数不同的时候,总和最小和最大的情况
题解:
分析当总和最小时,(n - L + 1) 个1,其他为2,4,....
当总和最大时, (n - R +1) 个 2^(n-1) ,其他 1,2,3....
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 5;
int main(){
int n, l, r;
cin >> n >> l >> r;
ll minans = 0, t = 0;
ll maxans = 0;
minans = n-l+1;
ll k = 2;
for(int i = 1; i <= l-1; i++){
t = t + k;
k = k * 2;
}
minans += t;
t = 0; k = 1;
for(int i = 1; i < r; i++){
t = t + k;
k = k * 2;
}
maxans = k * (n-r+1)+ t + 1;
cout << minans << " " << maxans-1 << endl;
return 0;
}