Codeforces Round 941 (Div. 2) ABC

news/2024/11/15 6:08:46/

Dashboard - Codeforces Round 941 (Div. 2) - Codeforces

A. Card Exchange

既然只看数量,咱也别统计是谁了,就看能不能变了。

首先先明确,如果现在都一样比如n个,可以一直操作直到 k-1。

我们可以先根据数量用map统计,然后放在vector后按数目排序,别管是谁了。

从大到小先一直变,像“招募”一样,每个位置,损失一个,然后全部招募下来,

直到不能招募,把总招募的压缩为k-1即可。

参考代码:


#define ll long long
#define endl "\n"
#define PII pair<int,int>
#define int long longconst int maxn = 1e5 + 5;void solve()
{map<int, int>mm;int n, k;cin >> n >> k;int other = 0;int ret = 0;for (int i = 0; i < n; i++){int tmp;cin >> tmp;mm[tmp]++;if (mm[tmp] == k){mm[tmp] = 0;other += k - 1;}}vector<int>arr;for (auto [a, b] : mm)arr.emplace_back(b);sort(arr.begin(), arr.end(),less<int>());for (int i = 0; i < arr.size(); i++){if (arr[i] + other >= k)other += arr[i] - 1;elseret += arr[i];}if (other == 0)cout << ret << endl;elsecout << ret + k - 1 << endl;
}

B. Rectangle Filling

任意两个同色之间的方块都可以转成这个颜色。

不管中间怎么变,最后肯定要把边上的,死角的给改变。

发现只要四个边上各有一个白色或者黑色即可。

(死角可以算两条边)

一行也无所谓,因为咱们会看到第一列和最后一列滴(赛时还以为得特判TWT)

#define ll long long
#define endl "\n"
#define PII pair<int,int>
#define int long longconst int maxn = 1e3 + 5;char arr[maxn][maxn];
int n, m;
bool check(char aim)
{for (int i = 1; i <= m; i++){if (arr[1][i] == aim)break;if (i == m)return false;}for (int i = 1; i <= m; i++){if (arr[n][i] == aim)break;if (i == m)return false;}for (int i = 1; i <= n; i++){if (arr[i][1] == aim)break;if (i == n)return false;}for (int i = 1; i <= n; i++){if (arr[i][m] == aim)break;if (i == n)return false;}return true;
}
void solve()
{cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> arr[i][j];if (check('W')||check('B'))cout << "YES" << endl;elsecout << "NO" << endl;
}

C. Everything Nim

吓得我赶紧复习了NIM,原来是异或。

然而这道题是叫NIM的博弈题。。

每次操作是对所有堆都拿的(那相同大小的堆就没有意义,统计一次即可),最大为当前最小堆的值,最少拿一个。

那我们是不是总共最多拿 最大堆的值 捏

然后就是看连续的情况了,只要不连续,我就可以一直掌握“主动权”。

(我有主动权,我这堆拿的只剩一个,你不得不拿一个,下一次还是我操作。如果只剩一堆了,我直接拿完就胜了

然而连续,就意味着可能失去主动权。如果连续是奇数个,就失去了。如果是偶数个,相当于没变。

————

看最开始谁先手,如果开局不是1,那么就是Alice先手,不然就同上,偶数个是Alice。(1 2 4)

                                                                                                                                            ^     ^

然后遍历一遍数组即可。

#define ll long long
#define endl "\n"
#define PII pair<int,int>
#define int long longconst int maxn = 2e5 + 5;int arr[maxn];
void solve()
{set<int>ss;int n;cin >> n;for (int i = 0; i < n; i++){int tmp; cin >> tmp;ss.insert(tmp);}if(ss.size() == 1){cout << "Alice" << endl;return;}int tot = 0;int flag = 1;for (auto x : ss)arr[tot++] = x;if(arr[0] == 1)for (int i = 0; i < tot; i++){if (arr[i] != i + 1){if (i % 2 == 1)flag = 0;break;}if (i == tot - 1){if (i % 2 == 0)cout << "Alice" << endl;elsecout << "Bob" << endl;return;}}if(flag == 0)cout << "Bob" << endl;elsecout << "Alice" << endl;
}


http://www.ppmy.cn/news/1442372.html

相关文章

基础算法前缀和与差分

前言 本次博客会介绍一维和二维的前缀和&#xff0c;以及一维二维差分的基本使用&#xff0c;尽量画图&#xff0c;多使用配合文字 使大家理解&#xff0c;希望有所帮助吧 一维前缀和 问题描述 这里有一个长度为n的数组&#xff0c;我们要算出【2,5】区间的元素和 暴力思…

详解JVM类加载

从类被加载到虚拟机内存中开始&#xff0c;到释放内存总共有7个步骤&#xff1a;加载&#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff08;Resolution&#xff09;、初始化&#xff08;Ini…

负二 进制

负二进制转换 题目&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 位于力扣的题解&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 目录 一、进制转换法&#xff1a; 二、拆分法&#xff0c;拆分正负位为a,b两个数&#xff0c;去构造这两个数 这里的bitset…

为什么二维数组初始化第一维数组长度可以为空,第二维不可以为空呢?

注意&#xff0c;数组第二维的长度声明永远不能省略。这是因为C语言中的二维数组元素在c编译程序为其分配的连续存储空间中是按行存放的&#xff0c;即存在完整第一行后存第二行&#xff0c;然后再第三行&#xff0c;以此类推。存放时系统必须知道每一行有多少个元素才能正确计…

Docker 备忘清单(一)

随着年龄的增长&#xff0c;记性开始退步&#xff0c;所以接下来打算把常用的一些语言命令&#xff0c;收集整理&#xff0c;以作备忘或查找使用。希望对自己或他人有所用途。 入门 1、入门 1.1、安装 curl -sSL https://get.docker.com/ | sh sudo chmod 777 /var/run/doc…

webpack配置文件

配置文件 webpack提供的cli支持很多的参数&#xff0c;例如--mode&#xff0c;但更多的时候&#xff0c;我们会使用更加灵活的配置文件来控制webpack的行为 默认情况下&#xff0c;webpack会读取webpack.config.js文件作为配置文件&#xff0c;但也可以通过CLI参数--config来…

K8S 部署和访问 Kubernetes 仪表板(Dashboard)

文章目录 部署 Dashboard UI浏览器访问登陆系统 Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中&#xff0c;也可以对容器应用排错&#xff0c;还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览…

随笔Ubuntu上的的一些使用

Ubuntu简易使用 常用指令 cdlsmkdirrf -rm 路径 换源 备份镜像 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑文件设置 sudo gedit /etc/apt/sources.list清华源 # 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe mul…