Educational Codeforces Round 104 (Rated for Div. 2) A-E 个人题解
1487A. Arena
n 个 Hero,分别有 \(a_i\) 的初始等级。每次两个 Hero 战斗时:等级相同无影响,否则等级高的英雄等级+1。直到某个英雄等级到了 \(100^{500}\)游戏结束。问有多少个英雄最后可能获胜。
Solution
只要所有英雄等级不是相同,那么必有 \(n - b_0\)个 Hero 获胜(\(b_0 代表等级最低的个数\))
Code
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
for (cin >> _; _--;) {
int n;
cin >> n;
vector<ll> a(n);
for (auto& x : a) cin >> x;
sort(a.begin(), a.end());
int cnt = n, i = 0;
while (a[i] == a[i + 1] && i < n) i++;
if (i == n) {
cout << 0 << "\n";
continue;
}
cout << n - count(a.begin(), a.end(), a[0]) << "\n";
}
return 0;
}
1478B. Cat Cycle
有一个\(n\)个点的圆环。A在 \(n\) 号点,B在 \(1\) 号点。A逆时针走,B顺时针走。如果A和B下一步是一个点,那么A走一步,B走两步。问经过 \(K\) 步后B在几号点
Solution
看了很久,发现是奇偶数问题,\(n\) 为偶数不会碰到一起,奇数个点时 B 多走 \(\frac{k}{n / 2}\) 步
Code
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
for (cin >> _; _--;) {
ll n, k;
cin >> n >> k;
k--; // 第一秒
if (n & 1) k += (k / (n / 2)); // 模拟奇数个点,k的变化
k++, k %= n;
cout << (k == 0 ? n : k) << "\n";
}
return 0;
}
1478C. Minimum Ties
\(n\) 支队伍要两两对战,平局各加一分,获胜加 3 分,失败无影响。请安排这些对局的结果使得最终所有人的分相等而且平局的数量尽可能少
Solution
显然总共有 \(n*(n-1)/2\) 局,如果全是非平局,那么一人 \((n-1)/2\)局,那么只有在 \(n\) 是奇数的情况下成立。不然必定有平局产生。
然后就按照每个人被分到多少局进行分配就好了。
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int n, i, j, k;
for (cin >> n; cin >> n;)
for (i = 0; i < n; i++)
for (j = i + 1; k = (j - i) * 2, j < n; j++)
cout << (k == n ? 0 : k < n ? 1 : -1) << ' ';
return 0;
}
1478D. Pythagorean Triples
寻找三元组(a,b,c)满足 \(c^2 = a^2 + b^2\) and \(c = a^2 - b\)
Solution
两个算式联立:\(a^2 = 2 * n + 1\) and \(c = b + 1\)
最后算出个:\((ll)((sqrt(2 * n - 1) - 1) / 2)\)
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
for (cin >> _; _--;) {
ll n;
cin >> n;
cout << (ll)((sqrt(2 * n - 1) - 1) / 2) << "\n";
}
return 0;
}
1478E. Cheap Dinner
给定四个种类的菜各自的价格,给定一些关系:第一种菜中的某一种不能同时和第二种菜中的某一种一起被选中,然后2-nd和3-th,3-rd和4-th。
问四种菜中各择一的最小代价。
Solution
如果单考虑前两种,那么对于第二种菜中的所有菜,可以通过不同时被选中关系得到自己的最小代价(或者不能),把这个代价移到第二种菜上,2-nd和3-rd的菜之间的转移等价于1-st和2-nd之间的转移。一种类似DP转移的思想。代码实现方面就用multiset乱搞,每次考虑两种关系的时候,先把当前点所不连通的点删掉,最后再加回来,可以这么做的原因是我只要考虑值,不需要考虑具体的关系。
Code
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
int arr[5][maxn], dp[5][maxn];
int nums[5];
vector<int> vv[5][maxn];
void solve() {
for (int i = 1; i <= 4; ++i) scanf("%d", &nums[i]);
for (int i = 1; i <= 4; ++i) {
for (int j = 1; j <= nums[i]; ++j) {
scanf("%d", &arr[i][j]);
}
}
for (int i = 2; i <= 4; ++i) {
int m;
scanf("%d", &m);
for (int j = 1, x, y; j <= m; ++j) {
scanf("%d %d", &x, &y);
vv[i][y].push_back(x);
}
}
for (int i = 1; i <= nums[1]; ++i) {
dp[1][i] = arr[1][i];
}
for (int i = 2; i <= 4; ++i) {
multiset<int> ss;
for (int l = 1; l <= nums[i - 1]; ++l) {
if (dp[i - 1][l] != -1) ss.insert(dp[i - 1][l]);
}
for (int j = 1; j <= nums[i]; ++j) {
for (int k = 0; k < vv[i][j].size(); ++k) {
int v = vv[i][j][k];
if (dp[i - 1][v] != -1) ss.erase(ss.find(dp[i - 1][v]));
}
if (ss.size() == 0)
dp[i][j] = -1;
else
dp[i][j] = *ss.begin() + arr[i][j];
for (int k = 0; k < vv[i][j].size(); ++k) {
int v = vv[i][j][k];
if (dp[i - 1][v] != -1) ss.insert(dp[i - 1][v]);
}
}
}
int ans = -1;
for (int i = 1; i <= nums[4]; ++i) {
if (dp[4][i] != -1) {
if (ans == -1 || ans > dp[4][i]) ans = dp[4][i];
}
}
printf("%d\n", ans);
}
int main() {
int t = 1;
// scanf("%d", &t);
while (t--) solve();
return 0;
}
Educational Codeforces Round 104 (Rated for Div. 2) A-E 个人题解的更多相关文章
- Educational Codeforces Round 76 (Rated for Div. 2)E(dp||贪心||题解写法)
题:https://codeforces.com/contest/1257/problem/E 题意:给定3个数组,可行操作:每个数都可以跳到另外俩个数组中去,实行多步操作后使三个数组拼接起来形成升序 ...
- Educational Codeforces Round 92 (Rated for Div. 2) B、C题解
TAT 第一场codeforces B. Array Walk #暴力 #贪心 题目链接 题意 有\(a1, a2, ..., an\) 个格子(每个格子有各自分数),最初为1号格(初始分数为\(a1 ...
- 【Educational Codeforces Round 38 (Rated for Div. 2)】 Problem A-D 题解
[比赛链接] 点击打开链接 [题解] Problem A Word Correction[字符串] 不用多说了吧,字符串的基本操作 Problem B Run for your prize[贪心] ...
- Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)
题目链接 题目大意 给你一个长度为n的字符串,可以交换相邻两个元素,使得这个字符串翻转,求最少多少种次数改变 题目思路 如果要求数组排序所需要的冒泡次数,那其实就是逆序对 这个也差不多,但是如果是相同 ...
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Educational Codeforces Round 43 (Rated for Div. 2)
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
- Educational Codeforces Round 35 (Rated for Div. 2)
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...
随机推荐
- vue+element-ui中引入编辑器
wangeditor编辑器 1.执行:npm install --save wangeditor 2.在你需要调用编辑器的vue文件中引入 wangeditor: import E from 'w ...
- HDU-2159 二维背包
最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经 ...
- vue 2实战系列 —— 复习Vue
复习Vue 近期需要接手 vue 2的项目,许久未写,语法有些陌生.本篇将较全面复习 vue 2. Tip: 项目是基于 ant-design-vue-pro ant-design-vue-pro 由 ...
- Python——第二章:列表的概念
在编程中,列表(List)是一种常用的数据结构,用于存储一组有序的元素.列表是Python中的内置数据类型之一,它允许你在一个变量中存储多个值,并且这些值可以是不同的数据类型,包括整数.浮点数.字符串 ...
- 部署堡垒机5——安装Core
部署jumpserver服务核心组件Core 一.前期准备 一个后台程序,基本上都是需要依赖于数据库才能运行,后台程序在启动的时候,代码就回去连接数据库,保证数据库,正确启动,且可以正确连接,否则后台 ...
- DVWA File Upload(文件上传)全等级
File Upload(文件上传) 目录: File Upload(文件上传) 一句话木马的构成 1. Low 1.上传一句话木马1.php 2.中国蚁剑 2.Medium 3. High 4.Imp ...
- SPSC Queue
在多线程编程中,一个著名的问题是生产者-消费者问题 (Producer Consumer Problem, PC Problem). 对于这类问题,通过信号量加锁 (https://www.cnblo ...
- linux安装redis、ununtu和centos等类似的发行版安装redis,完全离线安装reids,自定义版本redis
redis各个版本源码包下载:Index of /releases/ (redis.io) 下载与解压 从Index of /releases/ (redis.io)选择自己需要的版本并下载(此处以r ...
- Spring Boot入坑-3-Maven简介
概述 Maven是一个自动化构建工具 能够将支持Maven项目的依赖包从远程仓库拉取到本地仓库,并进行依赖管理 项目中通过pom.xml来描述项目,对项目依赖进行管理与配置 给项目提供编译.打包.安装 ...
- Flutter 中常用的视频播放器
Flutter 中常用的视频播放器有很多种,不同的播放器有着各自的优势和缺点.下面是一些常用的视频播放器,以及它们的优势.缺点和性能优化策略. video_player: 优势:Flutter 官方提 ...