C. Game with Multiset
1.C. Insert and Equalize2.C. Removal of Unattractive Pairs3.D. Jumping Through Segments4.E. Good Triples5.F. Shift and Reverse6.D. Yet Another Monster Fight7.A. Constructive Problems
8.C. Game with Multiset
9.A. Rating Increase10.B. Swap and Delete11.A. Problemsolving Log12.B. Preparing for the Contest13.C. Quests14.D. Three Activities15.E2. Game with Marbles (Hard Version)16.cf刷题有感17.A. Anonymous Informant18.A. Forked!19.B. Make Almost Equal With Mod20.C. Heavy Intervals21.D. Split Plus K22.A. 202323.B. Two Divisors24.C. Training Before the Olympiad25.D. Mathematical Problem26.F. Greetings27.C. Partitioning the Array28.G. Bicycles29.E. Eat the Chip30.G. Lights31.D. Array Repetition32.D. Berserk Monsters33.E. Increasing Subsequences34.D. Very Different Array35.G. Mischievous Shooter36.B. Plus-Minus Split37.B. A Balanced Problemset38.C. Did We Get Everything Covered39.D. Find the Different Ones!40.C. Grouping Increases41.D. Good Trip42.C. Physical Education Lesson43.E. Final Countdown44.D. Divisible Pairs45.G. Vlad and Trouble at MIT46.A. Brick Wall47.B. Minimize Inversions48.C. XOR-distance49.A. Moving Chips50.B. Monsters Attack!51.C. Find B52.D. Slimes53.C. Turtle Fingers: Count the Values of k54.D. Turtle Tenacity: Continual Mods55.D. Vlad and Division56.C. LR-remainders57.D. Lonely Mountain Dungeons反思:要把各种可能的情况都判断一遍再提交!不要急着提交
简介
仓库里有若干个二次方数,请问是否能取出若干数使得刚好等于给定数?
情况讨论
情况1.仓库里只有一个4,但是我要求2,求不得
情况2.仓库里有三个1,我要求3,能求
大概思路
从
细节注意
1.for循环减法可以用一次性减法(除法找出减的次数)代替,速度会快很多
2.
3.pow函数比较耗时,可以用(1<<n)或者log2代替
代码1
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll n;
cin>>n;
ll a[35]={0};
while(n--)
{
ll q,v;
cin>>q>>v;
if(q==1) a[v]++;
else
{
int i=log2(v);;//1.判断是否正常退出
//2.代表最外面的1的位置
for(i;i>=0;i--)//不从29开始,一定程度的优化
{
ll b=a[i];//仓库里i的数量
ll d=pow(2,i);//当前i代表的实际值
if(log2(v)>=i) v-=min(b,v/d)*d;//最多能减多少乘上减去的值,核心优化
if(v==0)break;
}
if(i!=-1)puts("YES");
else puts("NO");
}
}
return 0;
}
dalao的代码2
#include<bits/stdc++.h>
using namespace std;
int c[60];
int main(){
ios::sync_with_stdio(false),cin.tie(0);
int q,op,v,i,j;
for(cin>>q;q>0;q--)
{
cin>>op;
if(op==1)
{
cin>>v;
c[v]++;
for(i=0;i<59;i++)
{
if(c[i]==3)//4可以由一个4组成,也可以由两个2组成,任意一个数可以由1 or 0个二次方数组成,多出来的部分就可以去进位Orz
{
c[i]-=2;
c[i+1]++;
}
}
}
if(op==2)
{
cin>>v;
for(i=30;i>-1;i--)
{
for(j=0;j<c[i];j++)
{
if(v>=(1<<i))v-=(1<<i);
}
}
if(v==0)cout<<"YES\n";
else cout<<"NO\n";
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~