• 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;
    }
    
    
  • 相关阅读:
    初识 vue
    Spring boot 整合 Swagger
    Swagger 注解
    初识 Swagger
    初识 mycat
    SpringBoot中的国际化
    为什么博客园用户体验这么差?
    Numpy常用方法及应用总汇
    嵌入式开发10种常见数字滤波算法
    .gitignore使用
  • 原文地址:https://www.cnblogs.com/Vty66CCFF/p/12326683.html
Copyright © 2020-2023  润新知