首页 > 其他分享 >【MX-S3】梦熊周赛 · 提高组 3 & FeOI Round 1

【MX-S3】梦熊周赛 · 提高组 3 & FeOI Round 1

时间:2024-08-17 19:48:24浏览次数:8  
标签:kc 周赛 S3 text sum Round int ll

野心


Journey

题意:
\(\text{range}(a, b, c)\) 表示序列

\[[a, a + c, a + 2c, \cdots, a + kc] \]

其中 \(k\) 是满足 \(a + kc < b\) 的最大非负整数。

给定大小为 \(n \le 2 \times 10^7\) 的数组 \(g\),求

\[\sum_{a = 1}^n\sum_{b = a + 1}^n\sum_{c = 1}^n\sum_{i \in \text{range}(a, b, c)} g_i \]


数据范围暗示很明显了,只放过线性做法。

每个 \(g_i\) 会被 \(a + kc = i\) 且 \(b > i\) 的三元组贡献到。

设 \(f(i)\) 表示 \(a + kc = i\) 的 \((a, c)\) 对数

\[\begin{aligned} f(i) &= \sum_{a = 1}^n\sum_{c = 1}^n[a + kc = i]\\ \\ &= n + \sum_{a = 1}^{i - 1}d(i - a)\\ \\ &= n + \sum_{a = 1}^{i - 1}d(i)\\ \end{aligned} \]

因此只要把 \(d(i)\) 筛出来然后做一遍前缀和即可。

最后再乘上 \(b\) 的 \(n - i + 1\) 种取值。

#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;

using ll = long long;
constexpr int N = 2e7 + 5, P = 1e9 + 7;

int n; ll A, B, C, g[N];

ll d[N], s[N], iv[64];
int v[N], p[N], idx, c[N];

ll qpow(ll a, int b) {
	ll c = 1;
	while(b) {
		if(b & 1) c = c * a % P;
		b >>= 1;
		a = a * a % P;
	}
	return c;
}

void init() {
	for(int i = 1; i <= 60; ++ i) iv[i] = qpow(i, P - 2);
	d[1] = 1;
	for(int i = 2; i <= n; ++ i) {
		if(!v[i]) {
			c[i] = d[i] = 2;
			p[++ idx] = i;
		}
		for(int j = 1, o; j <= idx && p[j] <= n / i; ++ j) {
			o = i * p[j];
			v[o] = 1;
			if(i % p[j] == 0) {
				d[o] = d[i] * iv[c[i]] % P * (c[i] + 1) % P;
				c[o] = c[i] + 1;
				break;
			}
			d[o] = d[i] * 2 % P;
			c[o] = 2;
		}
	}
	for(int i = 2; i <= n; ++ i) d[i] = (d[i] + d[i - 1]) % P;
}

inline int f(int i) {
	return (n + d[i - 1]) % P;
}
int main() {
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> A >> B >> C, init();
	cin >> g[n];
	for(int i = n; i > 1; -- i) {
		g[i - 1] = (A * g[i] % P * g[i] + B * g[i] + C) % P;
	}
	ll ans = 0;
	for(int i = 1; i <= n; ++ i) {
		ans = (ans + g[i] * f(i) % P * (n - i + 1)) % P;
	}
	cout << ans;
	return 0;
}

标签:kc,周赛,S3,text,sum,Round,int,ll
From: https://www.cnblogs.com/Luxinze/p/18364892

相关文章

  • Splitting Items(Round 169)
    #include<bits/stdc++.h>#defineendl'\n'#defineintllusingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();signedmain(){#ifdefGordenfreopen("in.txt","rt",stdin......
  • 牛客周赛 Round 55
    E考虑dp,用dp[i][j......
  • CF Round 966 Div3
    A给定一个字符串,判断是不是大于等于10210^2102的形式,例如......
  • INFS3208 – Cloud Computing
    SchoolofElectricalEngineeringandComputerScienceINFS3208–CloudComputingProgrammingAssignmentTaskI(10Marks)Taskdescription:Youareadeveloperataleadingsoftwaredevelopmentcompanytaskedwithcreatingascalableandefficientdeploy......
  • jenkins推送代码到aws的s3存储桶
    1.aws创建用户2.服务器配置安装awspip3.6installawscliAWSAccessKeyID[None]:公钥AWSSecretAccessKey[None]:私钥Defaultregionname[None]:地域Defaultoutputformat[None]:json3.s3存储桶要提前建好4.piplinepipeline{enviro......
  • Codeforces Round 894 (Div. 3) D
    题目:E.KolyaandMovieTheatre题目链接:https://codeforces.com/contest/1862/problem/E思路:主要用优先队列存放大于0的元素,然后除了第一个数据后的每m个数据就可以存放到记录数组里面,最后遍历找价值最大的点击查看代码#include<bits/stdc++.h>#defineintlonglongusing......
  • html5+CSS3 Canvas动画分享
    1.赛朋博客赛车动画 源码分享:<!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <title>赛车</title>  <style>    *{      margin:0;      padding:0;      bo......
  • 医学成像控制卡:268-基于FMC接口的DSP TMS320C6657子卡模块 关键任务
    基于FMC接口的DSPTMS320C6657子卡模块一、概述       FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所有开发板中都使用。该DSP子卡模块以TI强大性能DSPTMS320C6657作为主芯片,专门针对xilinx开发板设计的标准板卡,用于关键任务......
  • BackgroundWorker和BlockingCollection配合实现有消息才发送的队列
    privateBackgroundWorkerm_MessageConsumer=newBackgroundWorker();privateBlockingCollection<string>m_BlockingQueue=newBlockingCollection<string>();构造函数{m_MessageConsumer.DoWork+=M_MessageConsumer_DoWork;m_MessageConsumer.Work......
  • 牛客周赛Round54(ABCDE)
     发布这些文章的目的很简单: 1.作者自己也是c++刚起手没多久的小白,深知自学一门学校不开设课程的语言的难处,(为了改错到处求人问路,看了好多没有真正帮助自己学习知识盲区,掌握新知识的教学视频,自己理解有偏差不能及时改正的困难)尽可能地帮助广大姐妹哥们儿们,我保证博文中的每......