目录
3.CF B. Quality vs Quantity<周二个人>
The first week
追光的人永远光芒万丈
一.前言
暑期集训第一周(其实是第二周,第一周去实训了),感觉相对来说还可以,过的很充实,没有了寒假集训那种迷茫,一切都很正常,也都在按计划行事。
第一天的个人赛:还几天没敲代码了,签到题还被卡了一发。组队赛的话整队状态还算可以,摆脱倒数第二定律了哈哈哈哈哈。
第二天个人赛的话,两个题,但是贪心和昨天一样没有做出来,该看看贪心和位运算了。下午打的牛客,大佬们太强了,现在打不过,队伍签到题出了点问题,罚时多了点,L题现在依然在想mutilset实现到底可不可以,还是得看看了,不然我也和数字一样麻木了。
暑期的周报换换形式,我决定写一个补题题解版(就在这)再加一个知识算法查漏汇总版,然后插进来。
二.部分题解与思路
1.福建省赛J题(构造大师)<周一组队>
题目复现


解题思路
就是给定一个整数,让你在100次之内变成完全平方数,很显然,去往一个指数为偶数的2的幂{因为2的2n次幂等于2的n次幂*2的n次幂)较为容易实现,那我们去哪呢,看一下题目,题目中给出了n的范围,到10的12次幂,并且要求是变化过程中不能超过的是10的18次幂,2的10次幂1024,2的40次幂不就是10的12次多一点嘛,那我们就都变成2的40次幂就好了
code(赛时队友版)
#include<bits/stdc++.h>
using namespace std;
using ll=long long ;
const int N=2e6+5;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--)
{
ll num;
vector<ll> a;
cin >> num;
if(floor(sqrt(num)) * floor(sqrt(num)) == num)
{
cout << 0 << endl << endl;
}//这个就是去特判一下是不是完全平方数,当然不特判也没什么关系,因为题目也没说我不能给他变成更大的
else
{
while(num < pow(2, 40))
{
a.push_back(num & -num);//num & -num:获取 num 的最低有效位(LSB),即二进制表示中最右边的 1 对应的值。
例如,num = 6(二进制 110),num & -num = 2(二进制 010)。
num += (num & -num);
//num += (num & -num):将 num 加上其 LSB,这会翻转 num 的最右边的 1 并可能产生进位。
例如,num = 6 → 6 + 2 = 8(二进制 1000
}
cout << a.size() << endl;
for(int i=0; i<a.size(); i++){
cout << a[i] << " ";
}
}
}
return 0;
}


924

被折叠的 条评论
为什么被折叠?



