• Educational Codeforces Round 81 (Rated for Div. 2)


    A - Display The Number

    思路:两个就可以组成1,那么四个就可以组成11,六个就可以组成最大111,三个就可以组成7,五个那么就是(3+2),组成71,所以当是偶数的话就组成全部是1就行,奇数就是最前面放7,后面全放1

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<queue>
     6 #include<cmath>
     7 using namespace std;
     8 const int maxn=1000+10;
     9 int main()
    10 {
    11 
    12     int a[6]={6,7,3,4,2};
    13     int n,nn;
    14     scanf("%d",&n);
    15     for(int i=0;i<n;i++)
    16     {
    17         scanf("%d",&nn);
    18         if(nn%2==0)
    19         {
    20             int t=nn/2;
    21             for(int j=0;j<t;j++)
    22                 printf("1");
    23             printf("
    ");
    24         } else
    25         {
    26             printf("7");
    27             int tt=nn/2-1;
    28             for(int jj=0;jj<tt;jj++)
    29                 printf("1");
    30             printf("
    ");
    31         }
    32     }
    33     return 0;
    34 }

    B - Infinite Prefixes

    思路:。。没想出。后来看了原来可以用前缀和写,把1变成-1,p[i+1]=p[i]-1;0的位置变成1,p[i+!]=p[i]+1;字符串s的长度为Len,那么p[Len]就是这个单个字符串的前缀和

    1.现在判断有无穷个情况,当字符串有个位置的值为x时,此时前缀和又为0,那么这肯定就是无穷的,可以加无穷多个这样的字符串

    2.当前位置值为x时,但是前缀和不为0,那么这个前缀就满足了条件,个数可以+1

    3.当前位置值<x时并且p[Len]>0,可以再在后面加一个这样的字符串,同样的位置的值就是p[Len]+p[i],

    可以再加,所以(x-p[i])%p[Len)==0)时(可以加一定数量的字符串),那么就满足条件+1;

    3.同理,当前位置值>x时并且p[Len]<0,再在后面加这样的字符串时,同样的位置的值就是p[Len]+p[i],

    所以(p[i]-x)%(-p[Len])==0),那么也满足条件+1;

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 1e5;
     5 
     6 int main(){
     7     int T;
     8     scanf("%d",&T);
     9     for(int i=0;i<T;i++)
    10     {
    11             int len;
    12             ll x;
    13             cin>>len>>x;
    14             string s;
    15             cin>>s;
    16             int Len=s.length();
    17             ll p[maxn];
    18             p[0]=0;
    19             for(int i=0;i<Len;i++)
    20             {
    21                 if(s[i]=='0')
    22                     p[i+1]=p[i]+1;
    23                 else
    24                     p[i+1]=p[i]-1;
    25             }
    26             ll he=p[Len];
    27             int sum=0;
    28             bool flag=false;
    29             for(int i=0;i<=Len;i++)
    30             {
    31                 if(p[i]==x)
    32                     sum++;
    33                 if(p[i]==x&&he==0)
    34                     flag=true;
    35                 if(i!=0&&he>0&&p[i]<x&&(x-p[i])%he==0)
    36                     sum++;
    37                 if(i!=0&&he<0&&p[i]>x&&(p[i]-x)%(-he)==0)
    38                     sum++;
    39             }
    40             if(flag)
    41                 printf("-1
    ");
    42             else
    43                 printf("%d
    ",sum);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    C#泛型
    C#接口
    C#委托和事件
    Unity Ray 射线
    C#学习基础
    Graph | Eulerian path
    Careercup | Chapter 8
    Leetcode | Pow(x, n)
    Leetcode | Gray code
    分布式缓存
  • 原文地址:https://www.cnblogs.com/Vampire6/p/12243588.html
Copyright © 2020-2023  润新知