首页 > 其他分享 >C. Game with Multiset

C. Game with Multiset

时间:2023-12-19 10:59:47浏览次数:35  
标签:log2 仓库 ll long -- Game Multiset 再减

原题链接

反思:要把各种可能的情况都判断一遍再提交!不要急着提交

简介

仓库里有若干个二次方数,请问是否能取出若干数使得刚好等于给定数?

情况讨论

情况1.仓库里只有一个4,但是我要求2,求不得
情况2.仓库里有三个1,我要求3,能求

大概思路

从\(i\in[log2(v),0]\)遍历(从大到小),如果对于i,仓库里有,就一直减\(2^i\)直到无法再减(再减就小于零或库里的i次数用光了)

细节注意

1.for循环减法可以用一次性减法(除法找出减的次数)代替,速度会快很多
2.\(v\)不会超过\(10^9\),所以\(2^i\)也不会超过long long 范围
3.pow函数比较耗时,可以用(1<<n)或者log2代替

代码

#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;
}

标签:log2,仓库,ll,long,--,Game,Multiset,再减
From: https://www.cnblogs.com/pure4knowledge/p/17913167.html

相关文章

  • 题解 ABC333F【Bomb Game 2】
    来个可能有点麻烦但不用动脑子的暴力做法。直接设\(f_{i,j}\)表示有\(i\)个人时,第\(j\)个人幸存的概率。显然有\(f_{1,1}=1\)。对于\(i>1\),分类讨论容易得到:\[f_{i,j}=\begin{cases}\frac{f_{i,n}}{2},&j=1\\\frac{f_{i-1,j-1}+f_{i,j-1}}{2},&1<j\lei\\\e......
  • CF1906K Deck-Building Game记录
    CF1906KDeck-BuildingGame题目链接:https://codeforces.com/problemset/problem/1906/K题意有大小为$n$的多重集$A$。求找到两个不相交子集,使它们各自的异或和相等的方案数。很容易将其转换为求如下值:$$\sum_{S\subsetA}2^{|S|}\cdot[\oplus_{x\inS}x=0]$$......
  • pygame安装问题
    pygame的安装问题(1)python-mpipinstall--upgradepip(2)pipinstallpygame(3)更换下载网站,且赋予信任pipinstallpygame-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com(4)python-mpipinstall-Upygame--user(5)python-mpipinstall-Upy......
  • CTFpwnAD世界dice_game题解wp
    惯例checksec一下看看main首先seed函数用时间生成一个随机数,这个随机数做为srand函数的参数让srand函数生成一个种子。(这个种子会影响后面的rand函数生成结果,并且同样的种子会使rand函数生成同样的随机数,就是所谓的伪随机)以及看到这里会有连续五十轮游戏。sub_A20这里就是每一轮......
  • CF1610H Squid Game
    题意给定一棵树,以及\(m\)条路径。让你选出最少的点,使得对于每一条路径,都有一个点距离链上的点离端点更近。Sol考虑将每一条路径分为直链和曲链考虑。注意到所有的曲链最多对答案有\(1\)的贡献。考虑直链的情况。注意到一个很显然的东西。对于一个选择的点,如果她的上方......
  • 奇偶game
    证明一下边带权做法的充分性我们考虑异或和对一个01序列,我们做一个异或前缀和,设为\(sum_n\),那么\(a_i=sum_i\enspacexor\enspacesum_{i-1}\)对任何时刻的没有产生矛盾的并查集森林,我们随便给每个森林的根节点赋值一个0或1,那么其他所有节点的值也能够推导出来(注意中途不可能重......
  • Game = Rust + WebAssembly + 浏览器
    ❝努力成为一个情绪价值的提供者❞大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder。前言在上一篇Rust编译为WebAssembly在前端项目中使用我们通过一个简单的HelloWorld的Demo,讲述了如何将Rust编译为WebAssembly,并在前端项目中使用。虽然,......
  • games101-2 透视深度插值矫正与抗锯齿分析
    透视深度插值矫正与抗锯齿分析深度插值的差错原因透视深度插值公式推导games101中的错误msaa与ssaa简要定义games101中ssaa的实现games101中msaa的实现深度插值的差错原因当投影的图形与投影的平面不平行时,这时进行透视投影,从上图中可以看出,投影平面上的线段时均匀......
  • ICPC2022Hangzhou C No Bug No Game 题解
    LinkICPC2022HangzhouCNoBugNoGameQuestion给定\(n\)个物品和上限\(k\),要求最大化分数,物品的选择顺序可以任意第\(i\)个物品一行\(p_i\)代表个数,后面\(p_i\)个\(w_j\)代表容量,定义\(sum=\sum\limits_{j=1}^{i-1}\),对于第\(i\)个物品\(sum+p_i\lek\)......
  • A. Flipping Game
    A.FlippingGame本质上是让我们找出一段区间内\(0\)的个数大于\(1\)的个数的最多的区间,且必须进行一次操作,所以可以考虑区间\(dp\),或者最小子序列和1最小子序列和\[\begin{aligned}dp_i是以a_i结尾的最小子序列和\\dp_i=\min(dp_{i-1}+a[i],a[i])\end{aligned}\]#inc......