2022年ICPC亚洲区域赛南京站题解

2024-06-02 09:04

本文主要是介绍2022年ICPC亚洲区域赛南京站题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • I: 完美回文
    • G: 邪恶铭刻
    • A:停停,昨日请不要重现
    • D: 聊天程序(待补)

I: 完美回文

解题思路:

​ 签到题,没什么好讲的。

解题代码:

void solve() {vector<int> a(30, 0);string str;cin >> str;int  maxx = 0;for(auto i : str){a[i - 'a'] ++;if(a[i - 'a'] > maxx) maxx = a[i - 'a'];}cout << str.size() - maxx << endl;
}

G: 邪恶铭刻

解题思路:

​ 该题的主要思路就是反悔,这三种情况中,卡牌选择神秘石头都属于固定操作,不需要什么特别的操作。

​ 主要就是分岔路,分岔路以上两种选择,那么我们先想一下到底是哪一种更优,当然是减的更优,尽量让分母更小,当然一定要保证合法的条件下进行。

​ 如果是两种情况下,那么卡牌选择是一定能执行的,那么就是能执行神秘石头就执行,并进行统计,如果后面导致不合法的情况下,那么就要进行让前面的神秘石头变为卡牌选择

解题代码:

const int N = 1e6+5;
int arr[N];
void solve() {int n; cin >> n;for(int i = 1;i <= n; i++) cin >> arr[i];int p = 1,q = 1,sum = 0;for(int i = 1; i <= n; i++){if(arr[i] == 1){p ++, q++;}else if(arr[i] == -1){if(q <= 1) {if(sum >= 1){sum --;p ++ ,q ++, q++;}else{cout << -1 << endl;return ;}}q--;}else if(arr[i] == 0)if(q > 1) q--, sum ++;else p ++, q++;} int t = __gcd(p,q);cout << p / t << " " << q / t << endl;return ;
}

A:停停,昨日请不要重现

解题思路:

该题是用的二维前缀和;
该题的详细思路是:

  1. 首先处理边界的袋鼠,将本题想象为没有洞,那么就可以将该题的边界进行缩小,缩小为最后剩余袋鼠的区间。
  2. 然后进行移动,该题主要不是移动全部的袋鼠,而是移动洞,随便确定一个点,然后将这个点进行移动。
  3. 因为走过的点不会再有袋鼠进洞,所以要用一个数组进行去重操作。
  4. 因为要记录某个点被走过几次,那么就用二维前缀和进行计算。
    不愧是区域赛的题,思维比省赛的题提高了一个档次。

解题代码:

const int N = 1e3 + 6;
int sum[N][N];
int user[N][N];void add(int x1,int y1, int x2,int y2){if(user[x1][y1]) return ;user[x1][y1] = 1;sum[x1][y1] ++ , sum[x2 + 1][y1] --, sum[x2 + 1][y2 + 1]++,  sum[x1][y2 + 1] --;
}void solve(){int n,m,k;cin >> n >> m >> k;for(int i = 1; i <= n + 1; i++){for(int j = 1; j <= m + 1; j++){user[i][j] = 0;sum[i][j] = 0;}}string str;cin >> str;int U = 1, D = n, L = 1, R = m;for(int i = 0, u = 1,d = n, l = 1,r = m; i < str.size(); i++){if(str[i] == 'U') u ++ , d ++;if(str[i] == 'D') u -- , d--;if(str[i] == 'L') l ++, r ++;if(str[i] == 'R') l -- , r --;U = max(U,u);R = min(R,r);D = min(D,d);L = max(L,l);}if(U > D || L > R){if(k == 0) cout << n * m << endl;else cout << 0 << endl;return ;}int x = (D - U + 1) * (R - L + 1) - k; // 剩余的袋鼠的数量add(U,L,D,R);for(int i = 0; i < str.size(); i++){if(str[i] == 'U') U --, D --;if(str[i] == 'D') U ++, D ++;if(str[i] == 'L') L --, R --;if(str[i] == 'R') L ++, R ++;add(U,L,D,R);}for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){sum[i][j] = sum[i][j] + sum[i - 1][j] + sum[i][j -1] - sum[i - 1][j - 1];// cout << sum[i][j] << " ";}// cout << endl;}int res= 0;for(int i =1 ;i <= n; i++){for(int j = 1; j <= m; j++){if(sum[i][j] == x) res ++;}}cout << res << endl;return ;
}

D: 聊天程序(待补)

解题思路:

解题代码:

这篇关于2022年ICPC亚洲区域赛南京站题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023532

相关文章

LeetCode11. 盛最多水的容器题解

LeetCode11. 盛最多水的容器题解 题目链接: https://leetcode.cn/problems/container-with-most-water 示例 思路 暴力解法 定住一个柱子不动,然后用其他柱子与其围住面积,取最大值。 代码如下: public int maxArea1(int[] height) {int n = height.length;int

Windwos +vs 2022 编译openssl 1.0.2 库

一 前言 先说 结论,编译64位报错,查了一圈没找到解决方案,最后换了32位的。 使用qt访问web接口,因为是https,没有openssl库会报错 QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());if (reply){if (reply->error() == QNetworkReply::NoError

【第十三课】区域经济可视化表达——符号表达与标注

一、前言 地图最直接的表达就是使用符号表达。使用符号可以把简单的点线面要 素渲染成最直观的地理符号,提高地图的可读性。只要掌握了 ArcGIS 符号制 作的技巧,分析符号并总结出规则,就可以制作符合要求的地图+符号。 (一)符号的选择与修改 符号的选择在制图中至关重要,使用符号选择器对话框可从多个可用样式 中选择符号,并且每个符号都有一个标签用来描述其图形特征,如颜色或类型, 利用这些标签可

(1995-2022年) 全国各省份-技术交易活跃度

技术交易活跃度是一个关键指标,用于衡量技术市场的交易频繁程度和活跃性。它不仅显示了市场参与者对技术交易的参与热情,而且交易的频率也体现了市场的活力。这一指标对于不同的利益相关者具有不同的意义: 对投资者而言,技术交易活跃度是把握市场趋势、评估交易策略和预测市场波动的重要工具。对企业来说,技术交易活跃度反映了其技术创新的活跃程度和市场竞争的激烈程度,有助于企业制定技术创新和市场竞争策略。对政策制定

LeetCode:经典题之141、142 题解及延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 142.环型链表 目录 系列目录141. 环形链表常量因子 1

2009年-2022年 地级市-环境污染处罚数据

环境污染处罚数据是环境保护领域中重要的信息资源,它记录了因违反环保法律法规而受到行政处罚或法律制裁的具体情况。这些数据对于提高公众的环保意识、促进企业采取环保措施以及推动环境治理具有重要作用。 数据内容概述 违法行为的主体:即受到处罚的个人或企业。违法事实:具体违反了哪些环保法律法规的行为。处罚依据:依据哪些法律法规进行处罚。处罚类型:如罚款、责令整改、停产整顿等。处罚金额:处罚的具体金额,通

C语言 | Leetcode C语言题解之第188题买卖股票的最佳时机IV

题目: 题解: int maxProfit(int k, int* prices, int pricesSize) {int n = pricesSize;if (n == 0) {return 0;}k = fmin(k, n / 2);int buy[k + 1], sell[k + 1];memset(buy, 0, sizeof(buy));memset(sell, 0, size

6月21日训练 (东北林业大学)(个人题解)

前言:   这次训练是大一大二一起参加的训练,总体来说难度是有的,我和队友在比赛时间内就写出了四道题,之后陆陆续续又补了了三道题,还有一道题看了学长题解后感觉有点超出我的能力范围了,就留给以后的自己吧。话不多说,上正文。 正文:   Problem:A 幸运数字: #include <bits/stdc++.h>using namespace std;int sum,ans;in

LeetCode:经典题之389 题解与延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 142.环型链表 目录 系列目录389.找不同哈希表

Google Code Jam 2014(附官方题解)

2014年Google编程挑战赛 Problem A. Magic Trick Confused? Read the quick-start guide. Small input 6 points You have solved this input set. Note: To advance to the next rounds, you will need to s