题意:给你一个数\(n\),问是否能有\(k\)个\(2\)次方的数构成,若满足,输出一种合法的情况. 题解:从高到低枚举二进制的每一位,求出\(n\)的二进制的\(1\)的位置放进优先队列中,因为\(2\)次方最小的值是\(1\),并且只能拆分不能合并,所以判断一下是否满足,然后对于\(2^i\),我们可以拆分成\(2^{i-1}\)和\(2^{i-1}\),这样总数就会\(+1\),用优先队列来模拟这个过程,当总个数等于\(k\)时就满足条件了. 代码: int n,k; priority_…
http://codeforces.com/contest/1095/problem/C 题意:给n找出k个2的幂,加起来正好等于n.例如 9,4:9 = 1 + 2 + 2 + 4 思路:首先任何数都能表示成2的次幂的和,其次很容易发现,n和k都是二的次幂的情况是最基础的,因为可以分成k个n/k,而n/k一定是二的次幂. 所以,可以得出结论,只要n是2的次幂,且k<=n,一定有解.因为k一定能分成二的次幂的和.假如是 8,3就可以分成 4,1,.4,2这两种基础情况. 如果n不是2的次幂,那n…
传送门 题意: 给出一个整数 n ,问能否将 n 分解成 k 个数之和,且这 k 个数必须是2的幂. 如果可以,输出"YES",并打印出任意一组解,反之输出"NO": 题解: 预备知识补充: 如何求出 num 最少需要多少个2的幂之和? 例如 : num = 3 = 20+21至少需要两个 num = 4 = 22 至少需要一个 num = 17 = 24+20 至少需要两个 根据贪心的思想 : 令 2x ≤ num,求出最大的 x ,那么此时num可以表示为 nu…
Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Repeating Cipher 传送门 题意:第一个字母写一次,第二个字母写两次,依次递推,求原字符串是什么 题解:1.2.3.4,非常明显的d=1的等差数列,所以预处理一个等差数列直接取等差数列的每一项即可 代码: #include<bits/stdc++.h> using namespace s…
Codeforces Round #529 (Div. 3) 题目传送门 题意: 给你由左右括号组成的字符串,问你有多少处括号翻转过来是合法的序列 思路: 这么考虑: 如果是左括号 1)整个序列左括号个数比右括号多 2 2)在这个位置之前,所有位置的前缀左括号个数都不少于前缀右括号个数 3)在这个位置和这个位置之后,在修改后所有位置的前缀左括号个数减去前缀右括号个数大于2 (这里这么想,把左变成右,左-1,右+1) 右括号也是这样 代码: #include<bits/stdc++.h> usi…
http://codeforces.com/contest/1095 A. Repeating Cipher #include <bits/stdc++.h> using namespace std; int N; string s; string ans = ""; int main() { scanf("%d", &N); cin >> s; ; ; i < N;) { ans += s[i]; cnt ++; i += c…
生病康复中,心情很不好,下午回苏州. 刷了一套题散散心,Div 3,全部是 1 A,感觉比以前慢了好多好多啊. 这几天也整理了一下自己要做的事情,工作上要努力... ... 晚上还是要认认真真背英语的. 找了几个同学问了一下,有点想自己做点 project 了,再学学机器学习,深度学习之类的,弄点小 AI project 玩玩吧... ...没事看点各种科技新闻开开眼界. [题目链接] A - Repeating Cipher 挺简单的,只要知道哪几个位置要输出就可以了. 时间复杂度:$O(N)…
传送门 题意: 有 n 个顶点,每个顶点有个花费 a[ i ],连接顶点 u,v 需要花费 a[v]+a[u]的代价. 有 m 个特殊边,每条边有三个参数 u,v,w 代表的意思是连接 u,v 的花费可以不是 a[v]+a[u] 而是 w(当然选择小的那个啦). 求联通所有的顶点需要的最少花费? 题解: 首先,需要建图,改如何建呢? 考虑到贪心的思路,首先不考虑 m 个特殊边,如何用最少的花费联通所有顶点呢? 答案是找到 a[ i ] 最少的顶点 i,其他 n-1 个顶点全部连向 i . 将这…
传送门 题意: 有 n 个孩子编号为 1~n ,绕着圣诞树 dance: 编号为 i 的孩子可以记住ai1,ai2两个小孩,ai1,ai2是 i 在顺时针方向的相邻的两个小孩,但ai1,ai2不一定是按顺时针方向排列的: 给出每个孩子相邻两个孩子的信息,让你还原这个序列. 题解: 可以以任一孩子作为第一个孩子,假设以编号 1 为第一个,编号1有两个相邻的孩子信息 a,b 如果 b 在 a 的顺时针方向,那么第二个孩子就是 a,反之为 b. 确定了前两个孩子后 i 从 1 开始遍历,第 i 个孩子…
传送门 题意: 给你一个只包含 '(' 和 ')' 的长度为 n 字符序列s: 给出一个操作:将第 i 个位置的字符反转('(' ')' 互换): 问有多少位置反转后,可以使得字符串 s 变为"Regular Bracket Sequence": 输出满足条件的位置的个数: 题解: 令 '(' = 1 , ')' = -1: 定义 sum[i]:括号序列的前缀和: 一个合法的括号匹配串的充要条件是: [1] 对于任何 i,sum[i] ≥ 0: [2] sum[n]=0: int n;…