【闯关练习】—— 1400分(构造)

文章讲述了如何通过编程解决Codeforces平台上的两个问题,涉及统计数字出现次数、模拟求解消去问题和计算矩阵的最大公约数。作者强调系列旨在培养刷题习惯,题目既不简单也不难,注重基础和应用能力的提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🌏博客主页:PH_modest的博客主页
🚩当前专栏:cf闯关练习
💌其他专栏:
🔴每日一题
🟡 C++跬步积累
🟢 C语言跬步积累
🌈座右铭:广积粮,缓称王!

一.关卡1(D. Epic Transformation)

👉传送门👈
在这里插入图片描述

1.Tutorial

  1. 统计每个数出现的次数,然后找到出现的最大次数maxx
  2. 然后通过模拟得出以下结论:(真的就是慢慢模拟找的
  • 如果maxx大于n/2,那么就说明这个数(x)可以和其他数全部消去,最后剩下的数一定是x,通过观察可以得出最后剩余的值满足以下结论:n-2*(n-maxx);
    在这里插入图片描述
    -如果maxx小于等于n/2,那么就需要分奇偶讨论,因为如果是偶数,最后剩余的两个相异的数能够抵消,如果是奇数就不可以;
    (1)偶数情况:只要我们优先将次数多的先结合,最后一定不会剩余数字,所以直接输出0,至于为什么大家可以下去模拟一下;(我也不会证明
    在这里插入图片描述

(2)奇数情况:奇数情况和偶数差不多,只不过最后一个数没办法消除,所以直接输出1

2.Solution

//https://codeforces.com/problemset/problem/1506/D
//结果和数量最多的那个数有关
//
#include<bits/stdc++.h>
#define int long long
using namespace std;

void solve()
{
   
    int n;
    cin>>n;
    map<int,int>mp;
    int maxx=0;
    for
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PH_modest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值