【CSP2020提高组正式赛】贪吃蛇(snakes)

本文介绍了CSP2020提高组正式赛中的贪吃蛇问题,重点讨论了解题思路。通过消除操作顺序影响,设置f[u]表示操作u后乘法的乘积,利用乘法分配律和DAG来处理加法和乘法的关系,从而解决该问题。
摘要由CSDN通过智能技术生成

【CSP2020提高组正式赛】贪吃蛇(snakes)

在这里插入图片描述

思路

混杂着乘法和加法时,我们发现加法会受到后面执行的乘法操作影响——具体表现就是加数乘上一个系数。这样子朴素的计算我们极大地受困于操作的顺序。因此 , 我们要消除顺序的影响 。

我们不妨设 f[u] 表示在 操作 u 之后所有执行到的乘法操作的乘积 , 那么只要倒叙做一遍操作我们就可以处理出往后的操作对现在的影响 ,言下之意就是现在要处理 操作u 内部中 , 后面的乘法操作对前面的加法操作的影响。这本质上是跟之前一样的问题。

根据乘法分配律 , 我们发现只需把系数挂在 ,根据指向关系建成的
DAG 对应节点上 , 依次向下传便可以记录 所有加法操作的系数之和。

#include<cstdio>
#include<vector>
#define P 998244353
using namespace std;

const int N = 1e5 + 100;

inline void read(int &x)
{
   
	x = 0;char c = getchar();
	while(c > '9' || c < '0') c = getchar();
	while(c >= '0' &&  c <= '9') x = x * 10 + c - '0' , c = getchar();
}

inline int mo(int x){
   return x >= P ? x - P : x;}

vector<int> rec[N];
struct note
{
   
	int t , po , v;
}opt[N];

int x[N] , n , m , f[N] , g[N] ,<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值