zoukankan      html  css  js  c++  java
  • nowcoder 181045 / 克洛涅的多项式 构造+思维

    题意:有多项式 $F(x),G(x)$,最高次项分别为 $n,m$。$F(x)$ 最高次项系数为 $1$. $m<n$

    给定 $n$ 个不同的点值,满足 $F(x[i])=G(x[i])$

    给定多项式 $G(x)$,求 $F(k)$,$k$ 是给定的.

    我们知道,$i+1$ 个不同的坐标能确定一个 $i$ 次多项式,即只要有 $i+1$ 个不同的坐标是确定的,那么这个多项式也就确定了.

    题中给定了 $n$ 个时刻的横坐标,即 $F(x)=G(x)$,那么有 $F(x)-G(x)=0$.

    令 $n$ 次多项式 $M(x)=F(x)-G(x)$

    而 $M$ 一定可以被表示成 $0$ 点式,即 $(x-a)(x-b)(x-c)......(x-n)$ 即一共有 $n$ 项.

    根据上面的性质:$n+1$ 个点确定唯一的一个多项式,而上面的 $0$ 点式只需 $n$ 个点,所以 $M(x)$ 可以被确定.

    而 $G(x)+M(x)=F(x)$

    所以在这个式子中,$M(x)$ 被 0 点式确定,而 $G(x)$ 是给定的,所以直接将 $k$ 带入求值即可.

    #include <bits/stdc++.h>  
    #define ll long long  
    #define mod 998244353  
    #define N 1000006 
    #define setIO(s) freopen(s".in","r",stdin) 
    using namespace std;   
    namespace IO 
    {
    	char *p1, *p2, buf[100000]; 
    	#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
    	int rd() { int x = 0;char c = nc();while (c < 48) {c = nc();}while (c > 47) {x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();}return x;}
    };     
    ll qpow(ll base,ll k) 
    {
    	ll tmp=1; 
    	for(;k;k>>=1,base=base*base%mod) if(k&1) tmp=tmp*base%mod;    
    	return tmp; 
    } 
    int a[N]; 
    int main() 
    { 
    	using namespace IO;  
    	// setIO("input");  
    	int n=rd(),m=rd(),k=rd(),i,j,ans=1; 
    	for(i=1;i<=n;++i) 
    	{ 
    		int x=rd();   
    		ans=(ll)ans*(k-x)%mod;    
    	} 
    	int mdl=1; 
    	for(i=0;i<=m;++i) 
    	{
    		int x=rd();    
    		(ans+=(ll)mdl*x%mod)%=mod;    
    		mdl=(ll)mdl*k%mod; 
    	} 
    	printf("%d
    ",ans);
    	return 0; 
    }
    

      

  • 相关阅读:
    关于Maven项目的pom.xml中的依赖或插件失效的解决方法
    java引用数据类型在方法中的值传递
    java匹配http或https的url的正则表达式20180912
    java正则表达式的进阶使用20180912
    java线程池 多线程 搜索包含关键字的文件路径
    魔术球问题
    [SDOI2009]晨跑
    [洛谷P2045]方格取数加强版
    最小路径覆盖问题
    最长不下降子序列问题
  • 原文地址:https://www.cnblogs.com/guangheli/p/11678739.html
Copyright © 2011-2022 走看看