Codeforces 1217C

Posted leprechaun-kdl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1217C相关的知识,希望对你有一定的参考价值。

思路是统计前导零,每次遇到 1,暴力向后搜 18 位,(1<<18)一定包括了所有情况。

转换成 10 进制后,如果大于 r-l, 小于 r-l+前导零数,那么就增加一种情况。

重点是这里我有个在 for 循环上的问题。

for (int i=1; i<3, i<5; i++) {
  printf("%d ", i);
}

输出结果:1 2 3 4

for (int i=1; i<5, i<3; i++) {
  printf("%d ", i);
}

输出结果:1 2

for (int i=1; i<3 && i<5; i++) {
  printf("%d ", i);
}

输出结果:1 2

因而可以看出,for 循环在判断相同变量真假时,会采取后面的一种。

如果同一变量判断多次,还是要加上 && 或 ||。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;
int n, zero, sum, ans;
char ch;

int main()
{
  scanf("%d", &n);
  ch=getchar();
  for (int i=1; i<=n; i++) {
    string s;
    ch=getchar();
    while (ch=='0' || ch=='1') {
      s+=ch;
      ch=getchar();
    }
    ans=0, zero=0, sum=0;
    for (int j=0; j<s.size(); j++) {
      if (s[j]=='0') {zero++;}
      else {
        for (int k=j; k<s.size() && k<j+19; k++) {
          sum=sum*2+s[k]-'0';
          if (sum>=k-j+1 && sum<=k-j+1+zero) {ans++;}
        }
      zero=0, sum=0;
      }
    }
    printf("%d
", ans);
  }
  return 0;
}

以上是关于Codeforces 1217C的主要内容,如果未能解决你的问题,请参考以下文章

[Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)][C. Playing Piano](代码片段

c_cpp Codeforces片段

Codeforces 86C Genetic engineering(AC自动机+DP)

CodeForces 1005D Polycarp and Div 3(思维贪心dp)

(Incomplete) Codeforces 394 (Div 2 only)

CodeForces 931F Teodor is not a liar!