首页 > 其他分享 >cf1774f解题报告

cf1774f解题报告

时间:2023-03-19 10:22:05浏览次数:48  
标签:报告 int void cf1774f write 解题 操作 伤害 define

Magician and Pigs
分析一下三个操作分别干了些什么

  1. 新添一只猪
  2. 使血量为 \(x\) 的猪血量变为 \(\max(x-v,0)\)
  3. 设前面操作后猪总共会受到 \(s\) 的伤害,复制一只血量为 \(\max(x-s,0)\) 的猪,使 \(s=s\times 2\)

根据操作 \(3\) 可得最多 \(\log x\) 次操作后会杀死任何一只复制的猪,此时复制变得没有任何意义。当没有任何操作 \(2\) 时,操作 \(3\) 变成了使猪的数量翻倍。所以考虑倒着做,处理每只猪最后能剩下多少猪。

预处理出每次操作 \(2/3\) 会造成多少伤害,对于操作 \(1\),若它后面产生的伤害已经超过这只猪的血量,显然不会有任何贡献。先去掉操作 \(2\) 造成的伤害,再考虑操作 \(3\) 造成的伤害。如果倒过来的第 \(i\) 次操作 \(3\) 造成 \(x\) 伤害能吃下来,那么前面所有伤害之后都能吃下来,因为每次伤害至少翻倍,那一只猪会变为 \(2^{cnt-i}\) 只猪,\(cnt\) 表示这次操作 \(1\) 后面共有 \(cnt\) 次操作 \(3\)。这是没有复制的猪承受伤害能增加的数量,还有复制出来的猪承受伤害能增加的数量,所以将血量减去 \(x\),再往前找。因为最多找 \(log x\) 次,所以复杂度为 \(O(n\log x)\)。

点击查看代码
#include<bits/stdc++.h>
#define ull unsigned long long
#define int long long
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
using namespace std;
namespace IO{
    template<typename T>
    inline void read(T &x){
        x=0;
        int f=1;
        char ch=getchar();
        while(ch>'9'||ch<'0'){
            if(ch=='-'){
                f=-1;
    }
            ch=getchar();
        }
        while(ch>='0'&&ch<='9'){
            x=x*10+(ch-'0');
            ch=getchar();
        }
        x=(f==1?x:-x);
    }
    template<typename T>
    inline void write(T x){
        if(x<0){
            putchar('-');
            x=-x;
        }
        if(x>=10){
            write(x/10);
        }
        putchar(x%10+'0');
    }
    template<typename T>
    inline void write_endl(T x){
        write(x);
        putchar('\n');
    }
    template<typename T>
    inline void write_space(T x){
        write(x);
        putchar(' ');
    }
}
using namespace IO;
const int N=8e5+10,mx=1e9,mod=998244353;
int n,m,opt[N],val[N],c[N],cnt,s[N],d[N],tot,sum,res=1,ans;
void solve(){
    read(n);
    for(int i=1;i<=n;i++){
        read(opt[i]);
        if(opt[i]!=3){
            read(val[i]);
        }
        if(opt[i]==2){
            sum+=val[i];
        }
        if(opt[i]==3){
            val[i]=sum;
            sum*=2;
        }
        sum=min(sum,mx);
    }
    sum=0;
    for(int i=n;i;i--){
        if(opt[i]==2){
            sum+=val[i];
        }
        if(opt[i]==3){
            if(val[i]==mx){
                continue;
            }
            if(!val[i]){
                res=res*2%mod;
                continue;
            }
            c[++cnt]=val[i];
        }
        else{
            val[i]-=sum;
            if(val[i]<=0){
                continue;
            }
            int S=0;
            for(int j=1;j<=cnt;j++){
                if(val[i]>c[j]){
                    S=(S+(1ll<<(cnt-j))%mod)%mod;
                    val[i]-=c[j];
                }
            }
            ans=(ans+(S+1)*res)%mod;
        }
    }
    write_endl(ans);
}
signed main(){
    #ifndef ONLINE_JUDGE
        freopen("1.in","r",stdin);
        freopen("1.out","w",stdout);
    #endif
    int t=1;
    while(t--){
        solve();
    }
    return 0;
}

标签:报告,int,void,cf1774f,write,解题,操作,伤害,define
From: https://www.cnblogs.com/luoshen0/p/17232556.html

相关文章

  • 日程报告18
    经过14个小时的不懈努力我终于实现了简单的app制作(不敢相信在昨天我连数据库都连接不上,甚至重新下载了一次AndroidStudio)在app中实现了数据库的连接,换成app中的功能就是......
  • 今日报告
    总结--服务外包杯进度+1代码时间(包括上课):1h代码量(行):100行博客数量(篇):2篇了解到的相关知识点:1、Python的相关练习2、好吧,还剪辑了一个视频......
  • 202113020023李湘楠实验2实验报告
    //test1.c#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineR1586#defineR2701intmain(){intnumber;inti;sr......
  • 日程报告17
    因为AndroidStudio4.1.3用起来实在是太不方便了,所以在今天我卸载了AndroidStudio,重新下载了最新版本说实话,我已经做好面对一堆报错的准备了,但是这一次他神奇的没有任......
  • 今日报告
    总结--又是工作收尾的一天呢代码时间(包括上课):1h代码量(行):100行博客数量(篇):1篇了解到的相关知识点:1、写了一个web界面,挺简单的,在其中也有不小的收获2、其余时间基本上都......
  • 保龄球比赛计分程序实验报告
    1.试验目的写一个保龄球比赛计分程序。2.实验过程在写这个程序的过程中,我们犯了很多的错误。这些错误包括代码方面的、逻辑方面的、设计方面的以及需求方面的。在写这个......
  • 「解题报告」ARC130E Increasing Minimum
    想法大概差不多,但是确实不知道咋维护(考虑每次删最小值的过程,我们相当于先删掉所有最小值\(=1\)的位置,然后删所有最小值\(=2\)的位置,依次类推。那么我们可以将删除的......
  • 华为 MPLS VPN 配置报告
    一、拓扑:二、需求:​1、CE1和CE3分别是总公司研发部和分公司研发部。​2、CE2和CE4分别是总公司非研发部和分公司非研发部。​3、CE1和CE3属于vpna。​4、CE2和CE......
  • 今日报告-25
    今日打卡所花时间(包括上课):6h代码量(行):380发表博客:3篇(不包括本篇)学习进度和了解到的知识点:今天继续完善第一次个人作业,实现了第二阶段功能,我实现了教师页面的登录,教师......
  • 《2022年IT行业项目管理调查报告》重磅发布!
    《2022年IT行业项目管理调查报告》新鲜出炉,这是禅道社区出品项目管理调查问卷并生成报告的第三年。过去的2022年波澜起伏,IT行业也随着大趋势浮沉。这样的背景下,我们在今年......