codeforces 730 A Toda 2
Problem
codeforces.com/problemset/problem/730/A
Reference
blog.csdn.net/ACMore_Xiong/article/details/52907334
题意
有 n 个正整数,每次可以选其中的 2 ~ 5 个数来同时减掉 1,减到 0 之后可以继续减但值还是 0。
要使得它们最终全部相等,并且让这个数尽量大。
Analysis
只考虑同时减2个或3个的情况(如果有多个相等的最大值,可以把它们分成两个一组或三个一组,多减几次)。
如果刚好有3个相等的最大值,就选中那3个一起减;否则,选最大的两个一起减。直到最大值和最小值相等。
之前以为 multiset 的 rbegin() 和 end() 返回值是一样的,一直 RE。
但其实 end() 返回的是最后一个元素的后一个位置,而 rbegin() 是最后一个元素的位置。
multiset 的 erase() 不能接受 rbegin() 的返回值(类型是 reverse_iterator),但能接受 begin() 的返回值,所以我是按降序排。
听说 multiset 比较相等的时候不是用“==”,而是用“ ! (a < b) && ! (b < a) ”,所以不需要重载“==”,只要重载“<”。(用 count() 的时候)
(p.s.:原来“ ios::sync_with_stdio(false) ”这句是要写在函数里面的…)
Source code
#include <iostream>
#include <string>
#include <vector>
#include <set>
using namespace std;
const int N = 100;struct node
{int id, r;node() {}node(int _i, int _r): id(_i), r(_r) {}bool operator < (const node &nd) const{return r > nd.r;}
};multiset<node> ms;
vector<string> ans;int main()
{ios::sync_with_stdio(false);int n;cin >> n;for(int i=0, r; i<n; ++i){cin >> r;ms.insert(node(i, r));}for(int num=2; ms.begin()->r != ms.rbegin()->r; num=2){if(ms.count(*ms.begin()) == 3)++num;vector<node> v(num);string s(n, '0');for(int i=0; i<num; ++i){v[i] = *ms.begin();ms.erase(ms.begin());if(--v[i].r < 0)v[i].r = 0;s[v[i].id] = '1';}ans.push_back(s);ms.insert(v.begin(), v.end());}cout << ms.begin()->r << '\n' << ans.size() << '\n';for(int i=0, e=ans.size(); i<e; ++i)cout << ans[i] << '\n';ms.clear();ans.clear();return 0;
}
codeforces 730 A Toda 2相关推荐
- Codeforces Round #730 (Div. 2) D2. RPD and Rap Sheet (Hard Version) 交互 + k进制的转换
传送门 文章目录 题意: 思路: 题意: 定义a⊕kba\oplus_k ba⊕kb为a,ba,ba,b在kkk进制下的不进位加法.系统会随机生成一个数xxx,你猜这个数,假设当前猜的数为yyy,如 ...
- CodeForces Round #730 D1. RPD and Rap Sheet (Easy Version)题解
Codeforces Round #730 (Div. 2) 题意: t组数据,每组给一个n和k,(easy version里面k=2) 每一次系统会输入一个初始的密码(初始密码是一个在[0,n−1] ...
- Codeforces Round #730 (Div. 2) D. RPD and Rap Sheet (交互,从easy到hard)
easy hard 题意 已知密码是kkk进制数,在十进制下是[0,n−1][0,n-1][0,n−1]之间,你有至多nnn次机会猜测这个数 设你猜的数字是yyy,如果答案正确,系统会返回111 如果 ...
- Codeforces Round #730 (Div. 2) D1. RPD and Rap Sheet (Easy Version)
传送门 思路: 假设0到n-1之间的数为密码,则可以想到一个可行的解法: 第一次输出0,之后的每一次都输出(i−1)⊕(i−2)(i-1)⊕(i-2)(i−1)⊕(i−2). 假设答案为x,那么第一次 ...
- CodeForces - 1543D2 RPD and Rap Sheet (Hard Version)(交互+模拟)
题目链接:点击查看 题目大意:交互题猜密码,设原密码为 xxx,猜的密码为 yyy,如果没猜到,密码会自适应变成 zzz,满足 x⊕z=yx \oplus z=yx⊕z=y ,最多猜 nnn 次,对于 ...
- CodeForces - 1543D1 RPD and Rap Sheet (Easy Version)(异或+交互)
题目链接:点击查看 题目大意:交互题猜密码,设原密码为 xxx,猜的密码为 yyy,如果没猜到,密码会自适应变成 zzz,满足 x⊕z=yx \oplus z=yx⊕z=y ,最多猜 nnn 次 题目 ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
- 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)
题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...
- 【codeforces 812C】Sagheer and Nubian Market
[题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...
- CodeForces 获得数据
针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...
最新文章
- Linux查看目录挂载点
- php主要算法设计,四种排序算法设计(PHP)
- Fragment使用小技巧
- HttpServletRequest对象方法的用法(转)
- ue4集合类型_3D游戏开发之UE4中的集合:TSet容器
- SqlServer2008 安装经验日志总结
- 内核中 subsys_initcall 以及初始化标号
- c++局部对象是什么_什么是Java内部类?
- 剑指offer面试题09. 用两个栈实现队列(队列、栈)
- 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_04.mybatis概述
- 【frida实战】“一行”代码教你获取WeGame平台中所有的lua脚本
- Google浏览器升级为最新打开网页时缓慢 “正在建立安全连接..........”解决方法
- 计算机远程桌面连接有几种方式,远程桌面连接的2种方法
- vb冒泡排序法流程图_vb数组排序-冒泡排序法
- python连接wss走自己的代理
- 西门子300 PLC 功能块及背景数据块的说明
- iOS底层系统:虚拟内存
- Access的密码以及如何连接有数据库密码的 Access
- 梳理学习技术的脉络,助你一臂之力
- C#,数值计算,解微分方程的龙格-库塔二阶方法与源代码