Educational Codeforces Round 81 (Rated for Div. 2)

A. Display The Number

题意:

告诉你摆出每个数字需要的火柴数,现在给你n跟火柴问能摆出的最大数字是多少

思路:

①当n为奇数:7111..

②当n为偶数:1111..

 

#include<iostream>
#include<algorithm>
#include<cstring>
 using namespace std;
 int main()
 {
     int t,n;
     scanf("%d",&t);
     while(t--){
         scanf("%d",&n);
         if(n%2==0){
             for(int i=1;i<=n/2;i++)
                 cout<<1;
             cout<<endl;
             continue;
         }
        else{
            cout<<7;
            for(int i=1;i<=(n-3)/2;i++)
                cout<<1;
            cout<<endl;
            continue; 
        }
     }
    return 0;
 }

 

B. Infinite Prefixes

题意:

给出一个字符串01串s,s可以无限次重复(例如s=010,可以重复为010010..),给出一个x,求出满足cnt0(串中0的个数)-cnt1(串中1的个数)=x的串的个数,如果有无限个,输出-1

思路:

cnt[i]=cnt0(i)-cnt1(i)(从0-i位置中,0的个数与1的个数的差值)

①首先考虑无限的情况:如果cnt[n-1]=0并且子串中有cnt[i]=x的情况,则为无限次

②没有无限的情况下,遍历整个串,如果(x-cnt[i])%cnt[n-1]==0&&(x-cnt[i])/x>=0(判断是否同号,注意x为负数的情况),则ans++

③还要考虑x=0的情况,ans要再加上1

 

#include<iostream>
#include<algorithm>
#include<cstring>
 using namespace std;
 typedef long long ll;
 const int maxn=1e5+10;
 char s[maxn];
 int t,n,x,a[maxn];
 int main() 
 {
    scanf("%d",&t);
    while(t--){
        int cnt=0;
        scanf("%d%d%s",&n,&x,s);
        for(int i=0;i<n;i++){
            if(s[i]=='0') cnt++;
            else    cnt--; 
            a[i]=cnt;
        }
        int ans=0,temp;
        if(!x) ans++;
        if(cnt==0){
            int flag=0;
            for(int i=0;i<n;i++){
                if(a[i]==x){
                    flag=1;
                    ans=-1;    
                }
            }    
        }
        else{
            int k=a[n-1];
            for(int i=0;i<n;i++){
                temp=x-a[i];
                if(temp%k==0&&temp/k>=0) ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
 }

 

C. Obtain The String

题意:

给出两个字符串s与t,每次可以从s中取出一个字序列(注意不是子串)加到一个字符串的末尾,问最少执行多少次取出操作能构成t,不能组成t输出-1

思路:

定义nx[i][j]为在位置i下一个j的位置在哪,可以通过last数组用dp得到(last[i]为i字符上一次出现的位置,初始化为n+1)

之后只需要通过循环利用nxt数组将t数组遍历一遍即可,不能组成t数组的条件为last[i]=n-1

#include<iostream>
#include<algorithm>
#include<cstring>
 using namespace std;
 const int maxn=1e5+10;
 int nxt[maxn][26],last[26],n,T,h;
 char s[maxn],t[maxn];
 int main()
 {
     scanf("%d",&T);
     while(T--){
         cin>>s+1>>t+1;
         int len1=strlen(s+1),len2=strlen(t+1);
         for(int i=0;i<26;i++) last[i]=len1+1;
         for(int i=len1;i>=0;i--){
             for(int j=0;j<26;j++) nxt[i][j]=last[j];
             last[s[i]-'a']=i;
         }
        int pos=0,ans=0,now=1;
        while(now<=len2){
            if(last[t[now]-'a']==len1+1){
                ans=-1;
                break;
            }
            pos=0;
            while(nxt[pos][t[now]-'a']<=len1&&now<=len2){
                pos=nxt[pos][t[now]-'a'];
                now++;
            }
            ans++;
        }
        cout<<ans<<endl;
     }
    return 0;
 }

 

全部评论

相关推荐

机智的豹子有点心碎:UU我还在找工作还没找到,一直在搜简历怎么改,总结了这些: 1.SEO:简历根据每一个岗位定制化:使用这个岗位中所描述的工作的词,它要求什么技能就把自己的技能描述成什么样子,把SEO用在自己身上(把我的简历和个人特质,当成一个热门产品来做 “搜索引擎优化”),让HR能用最低的门槛看到我 2."顺序:把岗位要求的技能跟经历放在简历的最开头、最显眼的位置" 3.包装:简历是一个最终交付说明书,只要最终学习成长做得到就可以,在合适的范围内自我吹捧(我这个人怎么能够在HR的角度被迅速的看懂和看到,减轻HR的工作压力) 4.每点加小标题​:用6~10字概括该段内容,便于面试官快速抓取信息。 5.避免空泛描述​:拒绝“培养了组织能力”等泛泛而谈,替换为具体行动和成果。 6."使用“三段式结构”​​:每段经历按“为什么做-做了什么-结果如何”展开: ​a) 为什么做​:痛点或目标(例如“品牌声量不足”) ​b) 做​了什么:方法论(例如“趋势洞察+竞品对标+人群细分”) ​c) 结果如何​:量化成果或影响(例如“推动客户投放20万预算”)" 7.量化成果​:用数字体现工作成效(如“整理500+份资料”“撰写2万字报告”)。 这些有的是我想去的岗的,如果对你有用的话按需修改就好~加油,早日上岸!
点赞 评论 收藏
分享
04-02 10:09
门头沟学院 Java
用微笑面对困难:这里面问题还是很多的,我也不清楚为啥大家会感觉没啥问题。首先就是全栈开发实习9个月的内容都没有java实习生的内容多,1整个技术栈没看出太核心和难点的内容,感觉好像被拉过去打杂了,而且全栈基本上很容易被毙。里面能问的bug是在太多了比如L:继承 BaseMapper 可直接使用内置方法’。请问你的 BaseMapper 是如何扫描实体类注解如果瞬时产生 100 个上传任务,MySQL 的索引设计是否会有瓶颈?你做过分库分表或者索引优化吗?全栈的内容可以针对动态难点去搞,技能特长写在下面吧,你写了这么多技能,项目和实习体现了多少?你可以在项目里多做文章然后把这个放下去,从大致来看实习不算太水,有含金量你也要写上内容针对哨兵里面的节点变化能问出一万个问题,这个很容易就爆了。
提前批简历挂麻了怎么办
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务