2019 ICPC Malaysia National 题解

本文详细解析了2019年ICPC马来西亚全国赛的多个编程题目,包括模拟、签到、状态压缩DP、背包问题、凸包等算法问题,涵盖了从简单签到题到复杂DP和几何问题的多种题型。
摘要由CSDN通过智能技术生成


题目链接 2019 ICPC Malaysia National

A - Mental Rotation [模拟]

题意

对于 N × M N \times M N×M 的矩形,每个单元格有一个字符,为 >,v,.,<,^
然后给一个字符串仅包含 L,R,表示将这个矩形左转或者右转
输出最终得到的矩形

分析

按题意模拟,对于旋转以 4 为周期

代码




B - SpongeBob SquarePants [签到]

题意

给出矩形的长宽,问这是否是正方形

分析

NULL

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;

int main() {
   
    int T;
    scanf("%d", &T);
    while(T--) {
   
        int n, m;
        scanf("%d%d", &n, &m);
        puts(n == m ? "YES" : "NO");
    }
    return 0;
}


C - I Don’t Want To Pay For The Late Jar! [签到]

题意

总共有 D D D 天,每天有 n i n_i ni 个店铺, S i S_i Si 时间
每个店铺有两个值 t x , f x t_x, f_x tx,fx
t x ≤ S t_x \leq S txS 的时候,得到的价值是 f x f_x fx
t x > S t_x > S tx>S 的时候,得到的价值是 f x − ( t x − S ) f_x - (t_x-S) fx(txS)
每天要选择一个得到价值最大的店铺
且输出这个每天的最大值

分析

直接取最大值

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
typedef long long ll;

int main() {
   
    int D;
    scanf("%d", &D);
    for(int i = 1; i <= D; ++i) {
   
        int n, s;
        scanf("%d%d", &n, &s);
        ll f, t, maxx = -1e18;
        for(int i = 1; i <= n; ++i) {
   
            scanf("%lld%lld", &f,&t);
            if(t > s) f = f - (t-s);
            maxx = max(maxx, f);
        }
        printf("Case #%d: %lld\n", i, maxx);
    }
    return 0;
}


D -

题意

分析

代码




E - Optimal Slots [背包][记录路径]

题意

多组样例,每组样例先输入两个整数 T , n T, n T,n,然后输入 n n n 个大于 0 0 0 的值
对于 n n n 个数可以自由选择,要求使的总价值尽可能接近 T T T 但不能超过 T T T
最后输出取的哪些值(要按照顺序),且输出总价值为多少
如果有多组答案符合,输出取的数的索引尽可能小的

分析

01背包记录路径

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;

int dp[105][105];
int ans[105];
int v[105];
// 保存路径,尽可能取开始索引较小的结果
// 如果要索引较大的,第一层循环可以正序
int main(){
   
    int n, m;
    while(~scanf("%d", &n) && n){
   
        scanf("%d", &m);
        memset(dp, 0, sizeof(dp));
        for(int i = 1; i <= m; i++) scanf("%d", &v[i]);
        for
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值