NC25113. 181045 / 克洛涅的多项式
描述
在主程序中 read(x); 即可。namespace io {
const int SIZE = 1e7 + 10;
char inbuff[SIZE];
char *l, *r;
inline void init() {
l = inbuff;
r = inbuff + fread(inbuff, 1, SIZE, stdin);
}
inline char gc() {
if (l == r) init();
return (l != r) ? *(l++) : EOF;
}
void read(int &x) {
x = 0; char ch = gc();
while(!isdigit(ch)) ch = gc();
while(isdigit(ch)) x = x * 10 + ch - '0', ch = gc();
}
} using io::read;
输入描述
输入的第一行包含三个整数 n, m, k ,意义如题面所述。
第二行包含 n 个整数,表示所给出集合中的元素。保证集合中元素互不相同。
第三行包含 m+1 个整数,表示所给多项式 G(x) 的各项系数。这一行中第 个数字表示 G(x) 中 次项的系数。
输出描述
输出仅一行,一个整数表示 F(k) 的值在模 998244353 意义下的结果。
示例1
输入:
3 2 3 0 1 2 1 1 1
输出:
19
说明:
Sister 给出的多项式 G(x) 为 。集合 S 为 {0, 1, 2} ,故 F(0) = G(0) = 1, F(1) = G(1) = 3, F(2) = G(2) = 7 。所以 F(x) 为 。答案为F(3) = 19 。C++14(g++5.4) 解法, 执行用时: 255ms, 内存消耗: 13944K, 提交时间: 2019-05-23 19:45:31
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int SIZE=1e7+10; const int mod=998244353; int n,m,k,t; char inbuff[SIZE]; char *l,*r; inline void init() { l=inbuff; r=inbuff+fread(inbuff, 1, SIZE, stdin); } inline char gc() { if(l==r)init(); return(l!=r)?*(l++):EOF; } int gi(){ int x=0,w=1;char ch=gc(); while((ch<'0'||ch>'9')&&ch!='-')ch=gc(); if(ch=='-')w=0,ch=gc(); while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=gc(); return w?x:-x; } int main(){ n=gi();m=gi();k=gi(); int ans=1,x=1; for(int i=1;i<=n;++i) t=gi(),ans=1ll*ans*(k-t+mod)%mod; for(int i=0;i<=m;++i,x=1ll*x*k%mod) t=gi(),ans=(ans+1ll*x*t)%mod; cout<<ans<<endl;return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 173ms, 内存消耗: 10192K, 提交时间: 2023-07-29 09:45:45
#include"bits/stdc++.h" using namespace std; const int SIZE=1e7+10; const int mod=998244353; int n,m,k,t; char inbuff[SIZE]; char *l,*r; inline void init() { l=inbuff; r=inbuff+fread(inbuff, 1, SIZE, stdin); } inline char gc() { if(l==r)init(); return(l!=r)?*(l++):EOF; } int gi(){ int x=0,w=1;char ch=gc(); while((ch<'0'||ch>'9')&&ch!='-')ch=gc(); if(ch=='-')w=0,ch=gc(); while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=gc(); return w?x:-x; } int main(){ n=gi();m=gi();k=gi(); int ans=1,x=1; for(int i=1;i<=n;++i) t=gi(),ans=1ll*ans*(k-t+mod)%mod; for(int i=0;i<=m;++i,x=1ll*x*k%mod) t=gi(),ans=(ans+1ll*x*t)%mod; cout<<ans<<endl; }