第一节 基础算法 - 1
CF1204A 题解
本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读。
题目简述
给定一个二进制字符串 \(S\),求这个二进制数包含 \(4 ^ k\) 的个数。
特殊的:若 \(4 ^ k = S\) 则此情况不计。
思路
简单思维题。
通过二进制进行操作,首先二进制长度 \((1 \le len \le 100)\) 还是挺大的,如果想直接模拟的话,转为十进制是不现实的,所以只能通过二进制操作。
通过样例观察可发现,二进制无非就两种情况:
-
长度为偶数;
-
长度为奇数。
对于情况 \(1\) 就很简单,因为此题的根本是找二进制的奇数位的个数,所以对于长度为偶数的字符串,直接输出长度除以 \(2\) 即可。
对于情况 \(2\),我们就需要判断除最高位以外是否有其他位为 \(1\) 的情况,也非常简单,稍微模拟即可。
经过以上分类讨论,思路就很清晰了,下面是代码实现:
#include<iostream>
using namespace std;
string str;
int main(){
cin >> str;
int n = str.length(); // 记录字符串长度
// 长度为偶数,情况 1
if(!(n & 1)) {
cout << n / 2;
return 0;
}
// 长度为奇数,情况 2
// 模拟即可
for(int i = 1; i < n; i ++)
if(str[i] == '1'){
cout << n / 2 + 1; // 除最高位有其他位为 1,正常输出
return 0;
}
cout << n / 2; // 否则特判
return 0;
}
\[\text{The End!}
\]
下午模拟赛
不想上传图片了
所以就咕了
本文来自博客园,作者:So_noSlack,转载请注明原文链接:https://www.cnblogs.com/So-noSlack/p/17599620.html