文章目录
题目链接 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 tx≤S 的时候,得到的价值是 f x f_x fx
当 t x > S t_x > S tx>S 的时候,得到的价值是 f x − ( t x − S ) f_x - (t_x-S) fx−(tx−S)
每天要选择一个得到价值最大的店铺
且输出这个每天的最大值
分析
直接取最大值
代码
#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