首页 > 其他分享 >3/8 训练笔记

3/8 训练笔记

时间:2024-03-08 20:48:56浏览次数:32  
标签:训练 int res long vector 笔记 debug include

闲话

排查许久后发现:
int vis[20000010] -> ac
long long vis[20000010] -> mle
并且开了 dill 所以查了挺久。

一个诡异的 bug 是:
...; debug(f, g) -> ac
...; -> wa
最后发现 vector resize 小了。
并且不知道为什么 debug 一下就好了。

P3702 [SDOI2017] 序列计数 题解

考虑设 \(f(x)\) 为一个多项式,其中 \(x^i\) 的系数表示有多少个长度为 \(x\) 的序列 \(a\),满足 \(\Sigma_{j = 1}^x a_j \equiv \pmod p\)。
那么我们初始化 \(f(x)\) 为系数全为1的多项式,\(g(x)\) 为当 \(i\) 不为质数时系数为1,否则为0的多项式。
我们考虑求出 \(f^n(x)\) 和 \(g^n(x)\),容易发现 \(f^n(0) - g^n(0)\) 即为答案。
时间复杂度:\(O(m + p^2logn)\)
代码:

#include <iostream>
#include <vector>
#include <map>
#ifndef ONLINE_JUDGE
#include "../../../debug.hpp"
#else
#define debug(...)
#define debugArr(...)
#endif 
#define int long long
using namespace std;
const int mod = 20170408;
signed vis[20000010],n,m,p;
vector<int> prime;
vector<int> v;
vector<int> res;
vector<int> f,g;
vector<int> mul(vector<int> &v1, vector<int> &v2) {
	for (int i = 0; i < p; i++) {
		v[i] = 0;
	}
	// cout << "v : ";
	// for (auto i:v) {
	// 	cout << i << " ";
	// }
	// cout << "\n";
	// cout << "v1 : ";
	// for (auto i:v1) {
	// 	cout << i << " ";
	// }
	// cout << "\n";
	// cout << "v2 : ";
	// for (auto i:v2) {
	// 	cout << i << " ";
	// }
	// cout << "\n";
	for (int i = 0; i < p; i++) {
		for (int j = 0; j < p; j++) {
			v[(i + j) % p] += v1[i] * v2[j] % mod;
			v[(i + j) % p] %= mod;
		}
	}
	// debug(v);
	// cout << "v : ";
	// for (auto i:v) {
	// 	cout << i << " ";
	// }
	// cout << "\n";
	return v;
}
vector<int> qpow(vector<int> &b, int k) {
	k--;
	res = b;
	while (k) {
		// debug(res);
		if (k & 1) res = mul(res, b);
		b = mul(b, b);
		k >>= 1;
		// for (auto i:res) {
		// 	cout << i << " ";
		// }
		// cout << "\n";
	}
	// for (auto i:res) {
	// 	cout << i << " ";
	// }
	// cout << "\n";
	return res;
}
void findPrime() {
	vis[1] = 1;
	for (int i = 2; i <= m; i++) {
		if (!vis[i]) prime.push_back(i);
		for (int j = 0; j < prime.size() && i * prime[j] <= m; j++) {
			vis[i * prime[j]] = 1;
		}
	}
}
signed main()
{
	cin >> n >> m >> p;
	// m = min(m, (long long)1e7);
	findPrime();
	// debug(prime);
	f.resize(p + 1, 0);
	g.resize(p + 1, 0);
	v.resize(p + 1, 0);
	for (int i = 1; i <= m; i++) {
		// debug(i);
		f[i % p]++;
		if (vis[i]) g[i % p]++;
	}

	// for (int i = 1; i <= m; i++) {
	// 	cout << f[i] << "\n";
	// }

	// debug()


	f = qpow(f, n);
	// for (auto i:qpow(f, n)) {
	// 	cout << i << " ";
	// }
	// cout << "\n";
	g = qpow(g, n);
	// debug(f, g);
	cout << (f[0] - g[0] + mod) % mod << "\n";
}

标签:训练,int,res,long,vector,笔记,debug,include
From: https://www.cnblogs.com/IANYEYZ/p/18061800

相关文章

  • 【前端Vue】社交信息头条项目完整笔记第1篇:一、项目初始化【附代码文档】
    社交媒体-信息头条项目完整开发笔记完整教程(附代码资料)主要内容讲述:一、项目初始化使用VueCLI创建项目,加入Git版本管理,调整初始目录结构,导入图标素材。二、登录注册准备,实现基本登录功能,登录状态提示,表单验证。三、个人中心,四、首页—文章列表TabBar处理,页面布局,处......
  • 笔记(七):事务底层与高可用原理
    日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。尤为重要的是二进制日志(binlog)和事务日志(包括redolog和undolog)。MySQL在事务实现机制上采用的是WAL(Wri......
  • C语言0基础入门游戏辅助开发—学习笔记02
    C语言0基础入门游戏辅助开发—学习笔记02PS:这里仅作为本人学习过程中的随笔。数据类型、sizeof运算符数据类型数据类型是在关键字内的,或者说关键字包含数据类型。数据类型有哪些程序中的代码和数据都是以二进制的形式存储的,对计算机系统和硬件而言,数据类型的概念不存在,这......
  • 笔记(五):MySQL之事务概述
    一、什么是事务事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。当在数据库中更改数据成功时,在事务中更改的数据便会提交,不再改变。否则,事务就取消或者回滚,更改无效。二、事务的四大特性1、原子性(Atomicity)原子性是指事务包含的所有操作要么......
  • 24电磁学A笔记
    目前截至3.8第零章数学基础......
  • 代码随想录算法训练营第四十天|● 343. 整数拆分 ● 96.不同的二叉搜索树
    整数拆分 题目链接:343.整数拆分-力扣(LeetCode)思路:第一步想的是用递归做,intdigui(intn){if(n==1)returnn;returnmax((n/2)*(n-n/2),digui(n/2)*digui(n-n/2));}可惜的是题目并没有规定一定要分成两份,因此这个思路是不对的,但已经初窥门径。......
  • 代码随想录算法训练营第四十天 | 96.不同的二叉搜索树,343. 整数拆分
    343.整数拆分 已解答中等 相关标签相关企业 提示 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k>=2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。 示例1:输入:n=2输出:1解释:2=1+1,1×1=1。......
  • (笔记)Vivado操作之时序约束介绍
     一、前言      任何一个FPGA工程都需要设置相关的时序约束,下面将介绍Vivado中如何进行时序约束操作以及各种约束的使用方法。 二、时序约束界面        在一个工程运行到IMPLEMENTATION后,进入到左侧的FlowNavigator窗口,点击IMPLEMENTION下的EditConstraint......
  • Java学习笔记——第九天
    综合项目:ATM项目需求拥有登陆界面,在登陆界面有开户、功能和退出系统功能。在开户时,要求输入姓名、性别、密码和每次取款限额,输入密码时要再输入一次以确认密码输入正确,之后自动生成不重复的8位数字卡号。在登陆时,若系统中没有账户,要能提示用户先去开户;若输入的账户不存在或密......
  • Verilog的学习教程与笔记(LZQ自用):
    verilog的学习教程与笔记(LZQ自用):第1章Verilog的历史视频讲解:https://www.bilibili.com/video/BV14K4y1u7kH?p=3&vd_source=da31a9aa66fbe4d6b904e621d9943c75​ 硬件描述语言,英文全称为HardwareDescriptionLanguage,简称HDL,HDL是一种用形式化方法来描述数字电路和数字......