零点工作室暑假集训(AtCoder--ABC245)

A - Good morning

题意: 某一天,高桥在A点整(24小时制)的B分钟起床,而青木在C点整的D分钟和1秒起床。如果高桥比青木早起床,打印“高桥”;否则,打印“青木”。

思路:就是判断A * 60 + B 和 C * 60 + D 的大小

AC代码

#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 200010;

int a, b, c, d;

int main()
{
    cin >> a >> b >> c >> d;
    
    if(a * 60 + b > c * 60 + d)
    {
        cout << "Aoki";
    }
    else 
    {
        cout << "Takahashi";
    }
    
    return 0;
}

B - Mex

题意:给定一个由整数组成的长度为N的序列:A=(A1,…,AN)。找到不在(A1,…,AN)中的最小非负整数。

思路:用一个数组统计数字出现次数,然后从0开始寻找这个序列中未出现的最小自然数。

AC代码

#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 2010;

int n;
int cnt[N];

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i ++)
    {
        int x;
        cin >> x;
        cnt[x] ++;
    }
    

    
    for(int i = 0 ; ; i ++)
    {
        if(!cnt[i])
        {
            cout << i;
            return 0;
        }
    }

    return 0;
}

C - Choose Elements

题意:给定两个整数序列,每个序列的长度为N:A=(A1,…,AN)和B=(B1,…,BN)。判断是否存在一个长度为N的序列X=(X1,…,XN),满足以下条件:对于每个i(1≤i≤N),有Xi=Ai或Xi=Bi。对于每个i(1≤i≤N-1),有|Xi-Xi+1| ≤ K。

思路:如果对于每个i(1≤i≤n-2)都满足以上要求,那么显然此时是否满足要求只与an-1, an, bn-1, bn有关。这种性质满足无后效性,考虑使用动态规划。
我们设有dp[i][2]:
若dp[i][0]=0表示第ai可用
若dp[i][0]=1表示第ai不可用
若dp[i][1]=0表示第bi可用
若dp[i][1]=1表示第bi不可用

AC代码

#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 200010;

int a[N], b[N];
int n, k;
int dp[N][2];

int main()
{
    cin >> n >> k;
    
    for(int i = 1 ;i <= n ;i ++) cin>>a[i];
    
    for(int i = 1 ;i <= n ;i ++) cin>>b[i];
    
    for(int i = 2 ;i <= n ;i ++)
    {
        if(!dp[i - 1][0] && abs(a[i] - a[i - 1]) <= k || !dp[i - 1][1] && abs(a[i] - b[i - 1]) <= k) dp[i][0] = 0;
        else dp[i][0] = 1;
        if(!dp[i - 1][0] && abs(b[i] - a[i - 1]) <= k || !dp[i - 1][1] && abs(b[i] - b[i - 1]) <= k) dp[i][1] = 0;
        else dp[i][1] = 1;
    }
    
    if(!dp[n][0]||!dp[n][1]) cout << "Yes";
    else cout << "No";
    
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值