首页 > 其他分享 >10_31_cf训练

10_31_cf训练

时间:2024-10-31 23:20:05浏览次数:4  
标签:std 10 const nums int 31 cf long define

10.31_CF_刷题

B. Kar Salesman

思路

一个顾客一种型号的车只能买一个,所以\(a_i\)号车需要\(a_i\)个顾客,所以至少需要\(max(a_i)\)个顾客,把所有车买完至少\(\frac{sum}{x}\)个顾客,所以取两者最大值就好

也就是说,先用比较少的去消耗比较多的,避免最后只剩下比较多的那种车

如果最多的那个被消耗完刚好全都完了,那正好

不然的话过程中一定会有\(x\)种车数量相同的情况,这样它们就可以一起被减少了,相当于\(\frac{sum}{x}\)

代码

神奇的代码
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
const int maxn = 5e5 + 5;
const int inf = 0x7f7f7f7f;

struct custom_hash 
{
	static uint64_t splitmix64(uint64_t x) 
    {
		x ^= x << 13;
		x ^= x >> 7;
		x ^= x << 17;
		return x; 
	}
	size_t operator () (uint64_t x) const 
    {
		static const uint64_t FIXED_RANDOM = std::chrono::steady_clock::now().time_since_epoch().count(); // 时间戳
		return splitmix64(x + FIXED_RANDOM);
	}
};

int nums[maxn], tot[maxn];

void solve()
{
    int n = 0, x = 0, s = 0, mx = 0;
    std::cin >> n >> x;
    for (int i = 1; i <= n; i++)
    {
        std::cin >> nums[i];
        mx = std::max(mx, nums[i]);
        s += nums[i];
    }
    std::cout << std::max(mx, s / x + (s % x != 0)) << endl;
}

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr); std::cout.tie(nullptr);
    //freopen("out.txt", "w", stdout);
    int t = 1;
    std::cin >> t;
    while(t--)
    {
        solve();
    }
    return 0;
}


E. Alternating String

思路

只能进行两种操作

  1. 删除一个字符,这个操作最多一次

  2. 替换一个字符

如果字符串长度为奇数就进行操作1,否则不进行

字符串长度为偶数时:我们想把位置奇偶性相同的变成相同的字符,可以分开看,维护统计替换成每个字符需要改多少个,可以用前缀和维护每个字符多少个,需要改几个可以直接算出来

难点时长度为奇数时需要删除哪一个呢,删除不同位置会影响这个字符后面位置的奇偶性,那么可以枚举删除哪一个

用前缀和维护奇数位和偶数位的字符有哪些,有几个

代码

神奇的代码
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
const int maxn = 2e5 + 5;
const int inf = 0x7f7f7f7f;

struct custom_hash 
{
	static uint64_t splitmix64(uint64_t x) 
    {
		x ^= x << 13;
		x ^= x >> 7;
		x ^= x << 17;
		return x; 
	}
	size_t operator () (uint64_t x) const 
    {
		static const uint64_t FIXED_RANDOM = std::chrono::steady_clock::now().time_since_epoch().count(); // 时间戳
		return splitmix64(x + FIXED_RANDOM);
	}
};

void solve()
{
    int n = 0, ans = 0;
    std::string s;
    std::cin >> n >> s;
    if (n == 1)
    {
        std::cout << 1 << endl;
        return;
    }
    std::vector<std::vector<int>> odd(n + 1, std::vector<int> (26, 0)), even(n + 1, std::vector<int> (26, 0));
    for (int i = 1; i <= s.size(); i++)
    {
        for (int j = 0; j < 26; j++)
        {
            odd[i][j] += odd[i - 1][j];
            even[i][j] += even[i - 1][j];
        }
        if (i & 1)
        {
            odd[i][s[i - 1] - 'a'] += 1;
        }
        else
        {
            even[i][s[i - 1] - 'a'] += 1;
        }
    }
    if (n & 1)
    {
        int tmpans1 = inf, tmpans2 = inf;
        ans = inf;
        for (int i = 1; i <= s.size(); i++)
        {
            tmpans1 = inf, tmpans2 = inf;
            int s1 = i / 2 + (n / 2 - i / 2);
            int s2 = i / 2 - (i % 2 == 0) + (n / 2 - i / 2) + 1 - (i & 1);
            for (int j = 0; j < 26; j++)
            {
                int t1 = odd[i - 1][j] + even[n][j] - even[i][j]; 
                int t2 = even[i - 1][j] + odd[n][j] - odd[i][j];
                tmpans1 = std::min(tmpans1, s1 - t1), tmpans2 = std::min(tmpans2, s2 - t2);
            }
            ans = std::min(ans, tmpans1 + tmpans2 + 1);
        }
    }
    else
    {
        int tmp = inf;
        for (int j = 0; j <= 25; j++)
        {
            tmp = std::min(tmp, n / 2 - odd[n - 1][j]);
        }
        ans += tmp;
        tmp = inf;
        for (int j = 0; j <= 25; j++)
        {
            tmp = std::min(tmp, n / 2 - even[n][j]);
        }
        ans += tmp;
    }
    std::cout << ans << endl;
}

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr); std::cout.tie(nullptr);
    //freopen("out.txt", "w", stdout);
    int t = 1;
    std::cin >> t;
    while(t--)
    {
        solve();
    }
    return 0;
}


A. Everything Nim

思路

相同的堆可以看成是同一堆

如果最小的堆为1,先手没得选

如果最小的堆不是1,先手可以全都取走,也能留一个,也就是说,先手这时候可以转移先手权,也可以保留先手权

能掌握先手权的必胜

神奇的代码
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
const int maxn = 2e5 + 5;
const int inf = 0x7f7f7f7f;

struct custom_hash 
{
	static uint64_t splitmix64(uint64_t x) 
    {
		x ^= x << 13;
		x ^= x >> 7;
		x ^= x << 17;
		return x; 
	}
	size_t operator () (uint64_t x) const 
    {
		static const uint64_t FIXED_RANDOM = std::chrono::steady_clock::now().time_since_epoch().count(); // 时间戳
		return splitmix64(x + FIXED_RANDOM);
	}
};

void solve()
{
    int n = 0;
    std::cin >> n;
    std::vector<int> nums;
    std::unordered_map<int, int, custom_hash> mp;
    int tmp = 0;
    for (int i = 1; i <= n; i++)
    {
        std::cin >> tmp;
        if (!mp[tmp])
        {
            nums.push_back(tmp);
            mp[tmp] = 1;
        }
    }
    std::sort(nums.begin(), nums.end());
    int sz = nums.size();
    if (nums[0] != 1)
    {
        std::cout << "Alice" << endl;
        return;
    }
    for (int i = 0; i < sz - 1; i++)
    {
        if (nums[i + 1] != nums[i] + 1)
        {
            if (i & 1)
            {
                std::cout << "Alice" << endl;
            }
            else
            {
                std::cout << "Bob" << endl;
            }
            return;
        }
    }
    if (nums.size() & 1)
    {
        std::cout << "Alice" << endl;
    }
    else
    {
        std::cout << "Bob" << endl;
    }
}

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr); std::cout.tie(nullptr);
    //freopen("out.txt", "w", stdout);
    int t = 1;
    std::cin >> t;
    while(t--)
    {
        solve();
    }
    return 0;
}

标签:std,10,const,nums,int,31,cf,long,define
From: https://www.cnblogs.com/SteinsGateSg/p/18519144

相关文章

  • 洛谷 P2606 [ZJOI2010] 排列计数 题解
    题目链接[ZJOI2010]排列计数-洛谷题解看到\(p_i>p_{\lfloori/2\rfloor}\)这个条件,可能一开始不会有什么想法。但是如果我们换种写法,即:\(p_i<p_{2i}\landp_i<p_{2i+1}\)。这样我们就能很容易看出来,这是小根堆的形式。现在我们从根节点开始考虑,假设左子树的大小......
  • 2024.10 做题笔记
    2024.10做题笔记10.2随机化和搜索题还是太神秘P9257[PA2022]Mędrcy将每条咒语代表的不知道它的两个人连边,如果存在一个人不知道任何咒语,即图是菊花图,则第一天他就会离开否则第二天相当于每个人知道了每个人都至少知道一条咒语,那么如果一个人发现自己知道的咒语中有人一......
  • 20222318 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    1.实验内容1.1问题回答(1)杀软是如何检测出恶意代码的?①基于特征码的检测:杀毒软件会维护一个包含各种已知恶意软件特征码的数据库。当扫描文件时,杀毒软件会将文件与数据库中的特征码进行比对,如果匹配,就会标记为恶意软件。②启发式检测:启发式检测技术通过分析程序的行为模式来检......
  • 20222319 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    1.实验内容1.1实验目的(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧正确使用msf编码器,使用msfvenom生成如jar之类的其他文件veil,加壳工具使用C+shellcode编程(2)通过组合应用各种技术实现恶意代码免杀如果成功实现了免杀的,简单语言描述原理,......
  • 每日计划-1031
    1. 完成160.相交链表/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode(intx):val(x),next(NULL){}*};*/classSolution{public:ListNode*getIntersectionNode(ListNode*head......
  • 10月第三篇读后感
    《代码大全2》是一本厚重而详尽的编程指南,涵盖了软件工程、敏捷开发、代码重构、性能调优以及编写高质量代码的方方面面。阅读这本书的过程,既是一次知识的洗礼,也是一次编程思维的深度拓展。在阅读的过程中,我深刻感受到了这本书对软件构建核心思想的阐述。它强调,编写代码不仅仅是......
  • GitHub每日最火火火项目(10.31)
    open-mmlab/Amphion:“open-mmlab/Amphion”是一个专注于音频、音乐和语音生成的工具包。其发音为/æm’fɑːrən/。这个项目旨在支持可重复的研究,并帮助初级研究人员和工程师在音频、音乐和语音生成的研究与开发领域迈出第一步。在当今数字化时代,音频技术在音乐制作、语......
  • 论文速读记录 - 202410
    坚持看论文不容易啊,十月也是多事之秋。看的论文有点少,也有点散,还是要专注一些具体的方向,梳理脉络,整理方案,才是看论文找解决方案的正确思路。以后的每篇论文解读的后面,会附带一点个人看法/评论,如有冒犯还请见谅。目录:LATECHUNKING:CONTEXTUALCHUNKEMBEDDINGSUSINGLONG-C......
  • VMwareWorkstation pro 17安装Win10(亲测好用)
    1、安装包 夸克网盘分享「cn_windows_10_consumer_editions_version_1909_x64_dvd_76365bf8.iso」链接:https://pan.quark.cn/s/175d19630109提取码:fSMs2、安装教程(基于WMwareworkstationpro17)1)       打开WMwareWorkstation,点击创建新的虚拟机  2)  ......
  • 2024.10.31 近期练习
    板刷ARC,再不刷就退役了。ARC185AmodMGame2猜结论题,两个人牌的总和是\(n\times(n+1)\)。若\(n\times(n+1)\bmodm=0\)或\(>n\)先手获胜。显然手牌还有大于\(1\)张的时候不可能失败。和取模\(m\)为\(0\)那么后手一定最后一张失败;若取模\(\len\)则后手一直......