Codeforces Round #625 -前三题题解

Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round)-A. Contest for Robots
打一场比赛做一个比赛和知识小结。
A. Contest for Robots

A. Contest for Robots

题意:很简单就不写了

思路:

  1. 第一个与第二个答题情况一样时都不选择情况为-1。
  2. 考虑第一个做对同时第二个做错的情况记录为x,第二个做对同时第一个做错的情况记录为y。
    结果就是y/x+1;
    为什么是y/x;对于每一个不够除+1,够除找最合适需要多一个也加1。

做题目时想法
关于这道题目细想:

  1. x==y && x!=0 maxx=2
  2. x>y maxx=1
  3. x==0 -1
  4. 否则 一个循环找

反思:
这个题目其实不需要用for枚举的,自己思路不够好
手速慢,细想花时间也有点多了。

代码1

#include <bits/stdc++.h>
#define pb(a) push_back(a)
#define pf push_front
#define beg begin
#define e end
#define rb rbegin0
#define re rend
#define nd cout<<endl
#define all(s) s.begin(),s.end()
#define pi acos(-1.0)
#define MaxN 0x3f3f3f3f
#define MinN 0xc0c0c0c0
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int N=2e5+15;
int n,a[N];
int c[N],b[N];
int main()
{
   
    cin>>n;
    int ans=0,cnt=0;
    for(int i=0; i<n; i++)
    {
   
        cin>>a[i];
    }
    for(int j=0; j<n; j++)
    {
   
        cin>>b[j];
    }
    for(int i=0; i<n; i++)
    {
   
        if(b[i]==1&&a[i]!=1)
        {
   
            ans++;
        }
        else if(a[i]==1&&b[i]!=1)
        {
   
            cnt++;
        }
    }
    if((ans==0&&cnt==0)||cnt==0)
        cout<<"-1"<<endl;
    else if(ans==cnt)
        cout<<"2"<<endl;
    else if(cnt>ans)
        cout<<"1"<<endl;
    else
    {
   
        int y=0;
        int u=cnt;
        for(int i=1;i<=1000;i++)
        {
   
            u=cnt*i;
            if(u>ans)
            {
   
                y=i;
                break;
            }
        }
        cout<<y<<endl;
    }
    return 0;
}

代码2

#include <bits/stdc++.h>
#define pb(a) push_back(a)
#define pf push_front
#define beg begin
#define e end
#define rb rbegin0
#define re rend
#define nd cout<<endl
#define all(s) s.begin(),s.end()
#define pi acos(-1.0)
#define MaxN 0x3f3f3f3f
#define MinN 0xc0c0c0c0
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int N=2e5+15;
int n,a[105],b[105];
int main()
{
   
    int x=0,y=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
        scanf("%d",&b[i]);
    for(int i=1;i<=n;i++)
    {
   
        if(a[i]&&!b[i])
            x++;
        if(!a[i]&&b[i])
            y++;
    }
    printf("%d",x?y/x+1:-1);
    return 0;
}

B. Journey Planning

Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round)-B. Journey Planning

B. Journey Planning

题意:

思路:

代码1

#include <bits/stdc++.h>
#define pb(a) push_back(a)
#define pf push_front
#define beg begin
#define e end
#define rb rbegin0
#define re rend
#define nd cout<<endl
#define all(s) s.begin(),s.end()
#define pi acos(-1.0)
#define MaxN 0x3f3f3f3f
#define MinN 0xc0c0c0c0
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int N=2e5+15;
int n;
long long f[1000000]= {
   0};
int b[200002];
int main()
{
   
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
   
        scanf("%d",&b[i]);
        if(b[i]-i+400000>=0)
            f[b[i]-i+400000]+=b[i];
    }
    ll ans=-1;
    for(int i=0; i<1000000; i++)
    {
   
        if(ans<f[i])
            ans=f[i];
// if(i<100)printf("%d\n",f[i]);
    }
    printf("%lld",ans);
    return 0;
}

代码2

#include <bits/stdc++.h>
#define pb(a) push_back(a)
#define pf push_front
#define beg begin
#define e end
#define rb rbegin0
#define re rend
#define nd cout<<endl
#define all(s) s.begin(),s.end()
#define pi acos(-1.0)
#define MaxN 0x3f3f3f3f
#define MinN 0xc0c0c0c0
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int N=2e5+15;
int main()
{
   
    map <int, long long> M;
    int n, x;
    long long ans = 0LL;
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> x, M[i - x] += (long long)x, ans = max(ans, M[i - x]);
    cout << ans;
    return 0;
}

C. Remove Adjacent

Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round)-C. Remove Adjacent

C. Remove Adjacent

题意:

小写字母构成的字符串s,让你去不断的删除字母,删除的规则是:将当前字母s[i] 前一个或者后一个 与当前的差为1,则删除当前这个。最后要求你删除字母的操作必须是最大。

思路:

按照题意删除,要想最大,那么我们就需要从字符串中字母字典序最大的开始考虑删除。

关于这道题目:

当时的思考是如思路所写,然后想怎么实现的时候,在想这个每次找一下最大,时间复杂度允许,但写起来不是最好,于是,再考虑一些字母的性质,最大的为’z‘ 那么我们倒过来当前的最大的‘z’,然后判断s[i] 是否与之相等。相等判断是否删除当前的s[i]

反思:

一开始想的时候并没有用string考虑 导致自己花了一些时间去想怎么删除后重构字符串。
所以关于string 今天早上打算细学深思。

代码:

#include <bits/stdc++.h>
#define pb(a) push_back(a)
#define pf push_front
#define beg begin
#define e end
#define rb rbegin0
#define re rend
#define nd cout<<endl
#define all(s) s.begin(),s.end()
#define pi acos(-1.0)
#define MaxN 0x3f3f3f3f
#define MinN 0xc0c0c0c0
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int N=2e5+15;
string s;
int n;
int main()
{
   
    cin>>n>>s;
    int ans = 0;
    for(char C = 'z'; C > 'a'; C--)
        for(int i = 0; i <s.size(); i++)
        {
   
            if(s[i] != C)
                continue;
            if((s[i - 1] + 1 == s[i] && i != 0) || s[i + 1] + 1 == s[i] && i != s.size() - 1)
            {
   
                s.erase(s.begin() + i);
                i = -1;
                ans += 1;
            }
        }
    cout<<ans<<endl;
    return 0;
}

String知识的回顾和加深:

一点都不会的可以去看看这篇博客

或者新写的一篇博客
s.size()

返回s 中字符的字符个数

s.erase( p )

删除迭代器p指向的元素,返回一个迭代器,指向被删除元素后面的元素
也就是删除p这个位置的元素,然后后面的元素往前移一位。

String 的遍历

string s;
string::iterator it;//迭代器
for(it=s.begin();it!=s.end();++it)

代码

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main()
{
   
    string s("wow wow");
    string::iterator it;
    for(it=s.begin();it!=s.end();++it)
        cout<<*it<<endl;
    for(int i=0;s[i];i++)
        cout<<s[i]<<endl;
    cout<<s<<endl;
    return 0;
}
全部评论

相关推荐

一共一个小时,面试难度以及自己的回答算是最近的面试压力比较大的,实习问了30分钟,中间穿插八股。1.redis数据结构2.redis持久化机制3.mysql索引底层4.聚簇索引与非聚簇索引5.索引优化6.索引失效7.mysql执行一条sql8.那么多索引mysql怎么选(不会)9.tcp与udp区别10.tcp为什么可靠11.消息队列作用12.kafka怎么保证消息有序性13.mcp是什么?14.skills是什么?15.jvm内存分配与回收过程(我讲了从创建对象到判断垃圾对象到垃圾回收我全说了一遍,是这个吗?)16.fullgc触发机制17.tcp的拥塞控制流程(不会了)18.分布式事务解决方案,说了2pc,3pc,tcc。算法是反转双向链表,没有按格式输出,但是面试官没让继续写了,面完以为挂了,结果晚上秒过,看看复试什么情况吧。今天百度打电话准备发offer了,业务跟在手子的差不多,很垂,并且说不分日常暑期,只看表现,会有转正机会,但是考虑再三还是拒绝了,百度实习薪资确实有点低,title也不如之前了,但是面试的二位业务老师我很喜欢,对我的评价也不错,希望之后能有机会共事。从三月份到现在一共面了六家,面试次数总共是8场,情况如下:脉脉二面(无答复,默认挂)百度二面已oc美团一面过,下周一二面shein一面过直接HR面游族一面过直接HR面腾讯一面过等待约二面滴滴明天一面面试通过率还是蛮高的,但是大部分都是日常,感觉对我现在的加成不大,大概率不会去,不知道暑期会是什么情况呢唉,希望能有面试吧,继续加油。字节被无hc直接取消了,现在还没人捞,有没有字节HR救救我
不管什么都不想跳动了:本人美团百度快手都待过,建议肯定是直接留快手多一点产出后转正or直接冲字节腾讯暑期吧。一是快手从福利到基建都吊打另外两家。美团现在这个业务比较惨,本来毛利就很低,亏损严重,今年很可能要优化人力降低成本,去了别说日常,就算暑期后面都很可能被优化。百度其实实习生权限挺高的,可以接触到一些含金量高的项目,但是现在的风评不如之前了,薪资也不高。二是转正概率和薪资是跟产出挂钩的,你都在手子已经积累产出了,去其他家日常实习产出都是从0开始,肯定不可能有你在手子转正可能性大啊,现在日常压根没必要去,而且我有两个师弟都是在快手日常转正的,不用太担心,安心留在手子一边多做一点产出然后一边冲字节腾讯暑期,字节腾讯今年实习岗位非常多的,不如好好把握这个,加油。
查看18道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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