前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AtCoder Beginner Contest 261 (A·B·C·D)

AtCoder Beginner Contest 261 (A·B·C·D)

作者头像
浪漫主义狗
发布2022-09-16 09:45:18
2320
发布2022-09-16 09:45:18
举报
文章被收录于专栏:HAUE_LYS'Blog

A - Intersection


题目大意

Originoal Link

给定两个染色区间的端点L_1,R_1,L_2,R_2,求同时染上两种颜色的区间长度


思想

  • 数据范围小,暴力枚举区间
  • 遍历两个区间,用res[i]记录被染色的情况
  • 遍历染色后的区间,计算区间长度

代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;

int res[N];

int main(){

    int a, b, c, d;

    cin >> a >> b >> c >> d;

    for(int i = a; i <= b; i ++) res[i]++;

    for(int i = c; i <= d; i ++) res[i]++;

    int cnt = 0;
    for(int i = 0; i <= 200; i ++) if(res[i] == 2) cnt++;

    if(cnt) cout << cnt - 1 << endl;
    else cout << 0 << endl;

    return 0;

}

B - Tournament Result


题目大意

Origional Link

给定N\times N的表,单元A_{i,j}记录了+ij的对局输赢平的三种情况,若记录有冲突说明该表不正确


思想

  • 遍历表格,遍历i行,每一行从j = i + 1列开始
  • 判断A{i,j}A{j,i}的记录是否符合事实
  • 不符合事实进行标记并退出

代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

const int N = 1010;

char mp[N][N];

int n;

int main(){

    cin >> n;

    for(int i = 1; i <= n; i ++){
        for(int j = 1; j <= n; j++) cin >> mp[i][j];
    }

    bool flag = 1;
    for(int i = 1; i <= n; i ++){
        for(int j = i + 1; j <= n; j ++){
            if(mp[i][j] == 'D' && mp[j][i] != 'D'){
                flag = 0;
                break;
            }
            else if(mp[i][j] == 'W' && mp[j][i] != 'L'){
                flag = 0;
                break;
            }
            else if(mp[i][j] == 'L' && mp[j][i] != 'W'){
                flag = 0;
                break;
            }
        }
        if(!flag) break;
    }

    if(flag) cout << "correct" << endl;
    else cout << "incorrect" << endl;

    return 0;

}

C - NewFolder(1)


题目大意

Origional Link

给定N个string类型的S串,按照给出S的顺序,对于总共出现过mS_i,若当前的S_i第一次出现,输出S_i,否则输出S_i(u-1)u表示第几次出现


思想

  • string s[N]存储读入S的顺序
  • map<string,int> a,进行记录当前的
  • 遍历s[N],使得a[s[i]]++,若a[s[i]] - 1 == 0说明是第一次出现

代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

map<string,int> a;

int n;

const int N = 1e6 + 3;

string s[N];

int main(){

    cin >> n;

    for(int i = 0; i < n; i ++) cin >> s[i];

    for(int i = 0; i < n; i ++){

        a[s[i]]++;
        int t = a[s[i]] - 1;
        if(t != 0){
            cout << s[i] << '(' << t << ')' << endl;
        }
        else cout << s[i] << endl;

    }

    return 0;

}

D - Flipping and Bonus


题目大意

Origional Link

投掷硬币为正面,计数器增加,反之计数器清零,给定N次投掷硬币为正面得到的钱X_i,给定M个奖励规则,若计数器的数值达到C_i,将获得Y_i的奖励,求如何使得得到的钱最多


思想

  • a[N]记录X_i,b[N]记录Y_i
  • 状态表示:dp[i][j]表示前i次投掷,当前计数器值为j时得到的钱
  • 状态计算:
    • 若投掷结果为正:则dp[i][j] = dp[i - 1][j - 1] + a[i] + b[j]
    • 反之计数器清零,更新之后的结果:dp[i][0] = max(dp[i][0],dp[i - 1][j])
  • 注意开long long

代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

LL n,m;

const LL N = 5010;

LL dp[N][N];

LL a[N];
LL b[N];

int main(){

    cin >> n >> m;

    for(int i = 1; i <= n; i ++) cin >> a[i];

    for(int i = 0; i < m; i ++){
        int x, y;
        cin >> x >> y;
        b[x] = y;
    }

    for(int i = 1; i <= n; i ++){
        for(int j = 1; j <= i; j ++){
            dp[i][j] = dp[i - 1][j - 1] + a[i] + b[j];
        }

        for(int j = 0; j < i; j ++){
            dp[i][0] = max(dp[i][0],dp[i - 1][j]);
        }

    }

    LL ans = 0;

    for(int i = 0; i <= n; i ++) ans = max(ans,dp[n][i]);

    cout << ans << endl;

    return 0;

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-7-25 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • A - Intersection
    • 题目大意
      • 思想
        • 代码
        • B - Tournament Result
          • 题目大意
            • 思想
              • 代码
              • C - NewFolder(1)
                • 题目大意
                  • 思想
                    • 代码
                    • D - Flipping and Bonus
                      • 题目大意
                        • 思想
                          • 代码
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档