欢迎光临
我们一直在努力

ABC443 C - Chokutter Addiction题解

Atcoder Beginner Contest 443 – C

C – Chokutter Addiction

前言

今天接着来水ABC

⚠️警告!!!今天水的题目是第三题!!!

为什么要警告呢?我也不知道……

题目大意

某公司从

0

0

0 时刻开始上班,到

t

t

t 时刻下班 (我猜公司的全体员工都很喜欢

t

t

t 这个数字吧)

高桥在公司的工作时间内会按照以下规则打开

c

h

o

k

u

t

t

e

r

chokutter

chokutter (说白了就是摸鱼)

  • 上班的同时打开

    c

    h

    o

    k

    u

    t

    t

    e

    r

    chokutter

    chokutter

  • 如果青木从高桥桌后经过的瞬间高桥正打开

    c

    h

    o

    k

    u

    t

    t

    e

    r

    chokutter

    chokutter 则关闭

    c

    h

    o

    k

    u

    t

    t

    e

    r

    chokutter

    chokutter

  • 高桥在某个时刻

    i

    i

    i 关闭

    c

    h

    o

    k

    u

    t

    t

    e

    r

    chokutter

    chokutter 后,一定会在

    i

    +

    100

    i+100

    i+100 时刻重新打开

    c

    h

    o

    k

    u

    t

    t

    e

    r

    chokutter

    chokutter

  • 从上班到下班期间,青木会从高桥桌后经过

    n

    n

    n 次,每次时间在

    a

    i

    a_i

    ai

问:从上班到下班期间总共查看了多长时间

c

h

o

k

u

t

t

e

r

chokutter

chokutter

翻译一下:

高桥在公司的工作时间内会按照以下规则摸鱼

  • 上班的同时摸鱼

  • 如果被领导看见了,就停止摸鱼

  • 停止摸鱼

    100

    100

    100 个时刻后,继续摸鱼

  • 从上班到下班期间,领导会检查

    n

    n

    n 次,每次在

    a

    i

    a_i

    ai 时刻

问:从上班到下班期间总共摸了多长时间鱼

思路

直接按时间模拟会超时,复杂度

O

(

t

)

O(t)

O(t)

因为题目保证

a

i

a_i

ai 有序,所以无需排序,直接模拟每个检查时间点,数学计算即可,是一道大水题

实现

枚举每个检查时间点并进行计算:

int ans=0;
int st=0; //摸鱼开始时间
for(int i=1;i<=n;i++){
if(st<a[i])ans+=a[i]st,st=a[i]+100;//领导来了
}
if(st<t){ //还没下班,领导走了
ans+=tst; //太爽了,摸鱼到下班
}

然后没了,真的没了

AC代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[300010];
signed main(){
int n,t;
cin>>n>>t;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int ans=0;
int st=0; //摸鱼开始时间
for(int i=1;i<=n;i++){
if(st<a[i])ans+=a[i]st,st=a[i]+100;//领导来了
}
if(st<t){ //还没下班,领导走了
ans+=tst; //太爽了,摸鱼到下班
}
cout<<ans;
return 0;
}

AC记录

其实可以不开数组的:

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
int n,t;
cin>>n>>t;
int ans=0;
int st=0; //摸鱼开始时间
for(int i=1;i<=n;i++){
int a;
cin>>a;
if(st<a)ans+=ast,st=a+100;//领导来了
}
if(st<t){ //还没下班,领导走了
ans+=tst; //太爽了,摸鱼到下班
}
cout<<ans;
return 0;
}

AC记录

再见

大家再见了!

不过我想问,他每次领导走过来就关,领导走了就开,领导不会发现吗?

领导发现了,不会把他炒了吗?

就不太理解了……

赞(0)
未经允许不得转载:171主机测评 » ABC443 C - Chokutter Addiction题解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址