首页 > 活着的证据(T1)
头像 MYCui_
发表于 2021-09-11 16:32:29
A 题 简单的贪心,不妨令 和 分别表示 V 和数量和 I 的数量。 的时候就直接先输出所有的 V 然后再输出所有的 I 即可。 否则就尝试先用 V 填满前面的尽可能多的数字位,然后考虑将 I 先用来占没有填满的位,如果还有富余的 I 就尽量往前面的数字位 就完事了。 #includ 展开全文
头像 AE86上树了
发表于 2021-09-11 13:26:45
[C.踩不出足迹]同或结论:假设a与b都是k位二进制数,则a b = a ^ b ^ 那么只要把每次的结果与上一次的同或及异或的进行异或或者同或运算即可 #include<bits/stdc++.h> #include<climits> using namespace st 展开全文
头像 我头发呢_
发表于 2021-09-17 19:13:42
A.活着的证据 在保位数不超过n的前提下,尽可能地增大数的位数。 从左往右填,先尽可能地填5,,若没填满n位且还有1剩余,在用剩下的1填后面的位。 填完1轮后,若还有1剩余,把剩下的1用完或把每个数加到8为止。 注意加的时候对5来说能加3,对1来说只能加1 #include <bits 展开全文
头像 唯沁
发表于 2021-10-05 11:58:55
A题 简单的贪心问题,首先把V从前向后每位都分配一个,剩下的V都是无用的了,然后考虑用I将剩下的没有V的位置填充,剩下的从前向后尽可能的分配给前面的位。 #include<bits/stdc++.h> using namespace std; typedef long long ll; 展开全文
头像 5ab
发表于 2021-09-10 22:12:58
一道简单的贪心题。 既然要最大化数的大小,那么所有的 V 和 I 显然优先用于填充位数,如果连位数都填不满,那么答案一定形如 55...511...1。 如果 V 和 I 有剩余,那么我们肯定尽可能将 V 放在前面,并用 I 填补剩余的位数。如果还有 I 多余,则考虑从高到低和 V 组成尽可能大的数 展开全文
头像 Daidly
发表于 2021-09-11 07:26:48
细节有一点多的贪心。 如果 说明填不满位数,改变位数:。 把 位数从前到后先填 后填 ,同时统计哪一位被填了 。 分析可得: 若这一位有 的存在,最多可以填到 。 否则只能填到 。 模拟贪心即可。 #include<bits/stdc++.h> using namespace 展开全文
头像 陌研
发表于 2021-09-11 08:20:26
【C.踩不出足迹】打表能发现规律,无论数组是什么,只会出现两种结果,cur=a_1 ^ a_2 ^...^ a_n和对cur逐位取反。取一个max就行了。 from math import * n,k = input().split(' ') n = int(n) k = int(k) a = 展开全文

等你来战

查看全部