首页 > 其他分享 >B. Collecting Game

B. Collecting Game

时间:2023-12-23 16:34:28浏览次数:25  
标签:Collecting 怪兽 吃掉 ll 初始值 Game ans sc

原题链接

简单概括

把每个i看成一只怪兽,每只怪兽的初始能量值是\(a[i]\),怪兽可以吃掉其他比自己能量值小的怪兽,并得到进化,能量值增加,增加的大小等于被吃的怪兽的能量值。
问每只怪兽最多能吃几只怪兽?

事实

1.无论如何,一只怪兽一定能吃掉所有初始值比他小的怪兽。
2.在吃完所有初始值比他小的怪兽后,能量值得到增加,有可能吃掉初始值比他还大的怪兽
3.暴力模拟肯定不行,所以我们要考虑优化
4.如果吃掉了初始值比他还大的怪兽\(b\),相当于能量值变成了“\(b\)吃完所有初始值比\(b\)小的怪兽的能量值”,即若\(i-2\)能吃掉\(i-1\),\(i-1\)能吃掉\(i\),那么\(i-2\)也能吃掉\(i\)

思路

令\(sum[i]\)为基础能量值,\(ans[i]\)为怪兽\(i\)能吃掉的怪兽数量。
\(i=n-1\)开始倒序遍历,如果\(sum[i]>a[i+1]\),那么\(ans[i]=ans[i+1]\),并更新\(sum[i]\)
初始值\(ans[n]=n-1\)

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct unit
{
    ll v;
    ll id;
}sc[100005];
bool cmp(unit a,unit b)
{
    return a.v<b.v;
}
int main()
{
    ll t;
    cin>>t;
    while(t--)
    {
        ll n;
        cin>>n;
        for(ll i=1;i<=n;i++)
        {
            cin>>sc[i].v;
            sc[i].id=i;
        }
        sort(sc+1,sc+n+1,cmp);
        ll sum[100005]={0};
        for(int i=1;i<=n;i++)sum[i]=sum[i-1]+sc[i].v;
        ll ans[100005]={0};
        int cnt=n-1;
        for(int i=n;i>=1;i--)
        {
            if(!(i==n||sum[i]>=sc[i+1].v))cnt=i-1;
            ans[sc[i].id]=cnt;
        }
        for(int i=1;i<=n;i++)printf("%d ",ans[i]);
        puts("");
    }
    return 0;
}

标签:Collecting,怪兽,吃掉,ll,初始值,Game,ans,sc
From: https://www.cnblogs.com/pure4knowledge/p/17923266.html

相关文章

  • 浅谈 Nim game(尼姆博弈)
    首先,我们需要了解\(Nim\)游戏是什么东西。\(Nim\)游戏指:两个人,有\(n\)堆数,每堆有\(a_i\)个,每次可以且仅可以取一堆中的若干个数,求问先手有没有必胜策略(当然两个人都足够聪明)。首先,先研究显然的必胜策略。比如,我们要得到\(0\)这个数,那么当你取完时还剩下\(0\)个。然......
  • Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)
    C.NumberGame我们考虑那些状态是必胜态我的回合时n为奇数(除1外),直接除以n则必胜下面偶数的情况稍复杂偶数我们能进行的操作只有除以一个奇数,需要考虑怎么把当前状态变为对手的必败态偶数一定含2的因子,\(n=2^k*q,q为奇数\)当\(k=1时如果q\)是一个质数那么只能除一次q这样......
  • E2. Game with Marbles (Hard Version)
    原题链接导论,有点博弈论的感觉?每个人轮流选一个大家都有的球,然后自己扣一个球,对方扣完。问女生剩下的球减去男生剩下的球,最大值是多少?一些条件1.初始每个人每种球都有2.女生想使答案值大一点,男生想使答案值小一点,换句话说,女生想使\(A\)值大一点,男生想使\(B\)值大一点,每个人都......
  • C. Game with Multiset
    原题链接反思:要把各种可能的情况都判断一遍再提交!不要急着提交简介仓库里有若干个二次方数,请问是否能取出若干数使得刚好等于给定数?情况讨论情况1.仓库里只有一个4,但是我要求2,求不得情况2.仓库里有三个1,我要求3,能求大概思路从\(i\in[log2(v),0]\)遍历(从大到小),如果对于i,仓......
  • 题解 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,那么其他所有节点的值也能够推导出来(注意中途不可能重......