如约而至(walk)
LCA大佬的做法:
考虑暴力的高斯消元,我们优化它。
$\sum\limits_{j} gcd(i,j)^{c-d} i^d j^d x_j=b_i$
$\sum\limits_{j} gcd(i,j)^{c-d} y_j = \frac{b_i}{i^d}$($y_j=j^d x_j$)
那么高斯消元的矩阵的$(i,j)$位置的值就是$gcd(i,j)^{c-d}$,我们令$f(x)=x^{c-d}$
我们对于高斯消元的矩阵,只需要保留记录$D[i][i]$位置上的值就可以了。
然后当我们消到第$i$行时,有
$\begin{align*} D[i][j] &= 0 &(j \ mod \ i \ne 0) \\ D[i][j] &= g(i) &(j \ mod \ i =0) \end{align*}$
证明:
$g(i) =f(i)-\sum\limits_{t|i,t<i}g(i)$
令$d=gcd(i,j)$($j \ mod \ i \ne 0$),此时
$D[i][j]=f(d)-\sum\limits_{t|d} g(t) = f(d)-g(d)-\sum\limits_{t|d,t<d}g(d)$
因为$g(d) = f(d) - \sum\limits_{t|d,t<d}g(d)$
所以$D[i][j]=f(d)-f(d)=0$
当$j \ mod \ i =0$时,$gcd(i,j)=i$,所以一开始的$D[i][j]$初始值一样,消的过程中减去的东西一样,所以最后的值也应该一样
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
#define ll long long
#define db double
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
#define getchar gc
const int maxn=1e6+7,maxt=1000+7;
const ll mod=998244353;
ll n,C,D,Td,b[maxn]; inline char gc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
} char cc;ll ff;
template<typename T>void read(T& aa) {
aa=0;cc=getchar();ff=1;
while((cc<'0'||cc>'9')&&cc!='-') cc=getchar();
if(cc=='-') cc=getchar(),ff=-1;
while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
aa*=ff;
} ll qp(ll x,ll k) {
ll rs=1;
while(k) {
if(k&1) rs=rs*x%mod;
k>>=1; x=x*x%mod;
}
return rs;
} ll finv(ll x) {return qp(x,mod-2);} ll qp1(ll x,ll k) {
if(k<0) return qp(x,k+(mod-1));
return qp(x,k);
} ll ans[maxn],f[maxn]; bool solve() {
For(i,1,n) b[i]=b[i]*finv(qp(i,D));
For(i,1,n) f[i]=qp1(i,C-D);
For(i,1,n) {
if(f[i]==0&&b[i]) return 0;
else if(f[i]==0) continue;
for(int j=i<<1;j<=n;j+=i) {
f[j]=(f[j]-f[i]+mod)%mod;
b[j]=(b[j]-b[i]+mod)%mod;
}
ans[i]=b[i]*finv(f[i])%mod;
}
Rep(i,n,1) {
for(int j=i<<1;j<=n;j+=i)
ans[i]=(ans[i]-ans[j]+mod)%mod;
}
For(i,1,n) ans[i]=ans[i]*finv(qp(i,D))%mod;
return 1;
} int main() {
freopen("walk.in","r",stdin);
freopen("walk.out","w",stdout);
read(n); read(C); read(D); read(Td);
while(Td--) {
For(i,1,n) read(b[i]);
if(!solve()) printf("-1");
else For(i,1,n) printf("%lld ",ans[i]);
printf("\n");
}
return 0;
}
如约而至(walk)的更多相关文章
- 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...
- python os.walk()
os.walk()返回三个参数:os.walk(dirpath,dirnames,filenames) for dirpath,dirnames,filenames in os.walk(): 返回d ...
- LYDSY模拟赛day1 Walk
/* 依旧考虑新增 2^20 个点. i 只需要向 i 去掉某一位的 1 的点连边. 这样一来图的边数就被压缩到了 20 · 2^20 + 2n + m,然后 BFS 求出 1 到每个点的最短路即可. ...
- How Google TestsSoftware - Crawl, walk, run.
One of the key ways Google achievesgood results with fewer testers than many companies is that we ra ...
- poj[3093]Margaritas On River Walk
Description One of the more popular activities in San Antonio is to enjoy margaritas in the park alo ...
- os.walk()
os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下. walk()方法语法格式如下: os.walk(top[, topdown=True[, onerror=None[ ...
- 精品素材:WALK & RIDE 单页网站模板下载
今天,很高兴能向大家分享一个响应式的,简约风格的 HTML5 单页网站模板.Walk & Ride 这款单页网站模板是现代风格的网页模板,简洁干净,像素完美,特别适合用于推广移动 APP 应用 ...
- 股票投资组合-前进优化方法(Walk forward optimization)
code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...
- Go Walk教程 - 流程控制( switch)
Go的 switch 非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项,不要break: var score =98 var result string switch score/ ...
随机推荐
- Maven使用初步
一.安装: 1.下载:http://maven.apache.org/download.cgi 2.设置环境变量 1.创建"M2_HOME",值为Maven安装路径(如:D:\Ja ...
- StringUtils工具
ppublic class StringUtils { private StringUtils() { } /** * 文本左边补零 * * @param maxLength 文本长度 * @para ...
- [Noip 2013 Day1-3] 货车运输 做法总结
[Noip 2013 Day1-3] 货车运输 做法总结 Online Judge:Luogu-1967 Label:启发式合并,离线,整体二分,按秩合并,倍增,最大生成树 打模拟离线赛时做到,顺便总 ...
- QVaraint类
一.QVaraint简介 QVaraint类作为一个包含了大多数Qt普通类型的的联合体类.因为c++联合体没有构造函数和析构函数的,许多继承的Qt类不能够在联合体当中使用.(联合体当中的变量共 ...
- 获取m,n之间的随机整数
获取m,n之间的随机整数 代码去下:
- python Mean Squared Error vs. Structural Similarity Measure两种算法的图片比较
# by movie on 2019/12/18 import matplotlib.pyplot as plt import numpy as np from skimage import meas ...
- Jquery实现图片瀑布流思路-简单版
目录 Jquery实现图片瀑布流思路-简单版 1.预备 2.开始 1.声明 2.主体 3.窗体大小改变事件 Jquery实现图片瀑布流思路-简单版 注意:本篇文章基于知道每张图片的实际尺寸的情况下 特 ...
- 菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表ngx_chain_t[转]
菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表 ngx_chain_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.c ...
- HDU 3923 Invoker | 暑训Day1 C题填坑
暑训第一天,专题为组合数学与概率期望. 最近一个月都没有学习新的知识,上午听聚聚讲课头脑都是一片空白.加上长期没刷题,下午做练习题毫无感觉.到晚上总算理清了蓝书上的一些概念,跟着榜单做题.最后唯独剩下 ...
- 自建免费的代理ip池
00x01--- 前言 因为爬虫被禁ip这样的反扒真的很凶,但自从建了一个代理ip池以后,反反扒就可以跟的上节奏.当然你也可以上网上各种代理平台自己付费.这些平台当然很方便提供api调用,还不用自己验 ...