好耶,均参考了大佬题解

对于B题

链接:https://ac.nowcoder.com/acm/contest/11164/B
来源:牛客网

题目描述

一天,小 L 收到了一个多项式 f(x)=∑i=0naixif(x) = \sum_{i = 0} ^ {n} a_ix ^ if(x)=i=0naixi,现在他想求这个多项式的若干点值,你能帮帮他吗?
即,给定 x1...xmx_1...x_mx1...xm,需要你求 f(x1)....f(xm)f(x_1)....f(x_m)f(x1)....f(xm)。由于结果可能很大,你需要输出结果对 998244353 取模的值。

输入描述:

第一行一个正整数 n,表示多项式 f 的次数。
第二行 n + 1 个整数 a0,a1...ana_0,a_1...a_na0,a1...an,表示 f 各项的系数。
第三行一个整数 m,表示要求的点数的个数。
第四行 m 个整数 xix_ixi,意义见【题面描述】。

输出描述:

输出仅一行 m 个数,为 f(x1)...f(xm)f(x_1)...f(x_m)f(x1)...f(xm) 对 998244353 取模的结果。
示例1

输入

复制
2
1 1 1
3
2 3 4

输出

复制
7 13 21

说明

f(x)=x2+x+1f(x) = x ^ 2 + x + 1f(x)=x2+x+1,在 x = 2,3,4 处的点值分别为 22+2+1=7,32+3+1=13,42+4+1=212 ^ 2 + 2 + 1 = 7, 3 ^ 2 + 3 + 1 = 13, 4 ^ 2 + 4 + 1 = 2122+2+1=7,32+3+1=13,42+4+1=21。
对于 30%30\%30% 的数据,满足 n,m≤5,ai,xi≤5n, m \leq 5, a_i, x_i \leq 5n,m5,ai,xi5。
另有 30%30\%30% 的数据,满足 a0=a1=...=ana_0 = a_1 = ... = a_na0=a1=...=an
对于 100%100\%100% 的数据,满足 1≤n,m≤1000,0≤ai,xi<9982443531 \leq n, m \leq 1000, 0 \leq a_i, x_i < 9982443531n,m1000,0ai,xi<998244353。
 
 
题解里对多项式的拆分值得关注,
一个 系数 1,1,1的 最高级为2次的方程,一开始在构想怎么形成这样一条方程,再把所给的点带进去,其实可以将次数从大到小扫一遍即可,
以1,1,1的例子举例,最后所得为x^2+x+1;
以x+ai为起步,每次乘以X在加上下一个ai;
首先,0*x+1;
再,1*x+1=x+1
再,(x+1)*x+1=x^2+x+1 即最后结果
在例如 系数为1,2,3
1.0*x+3     2.3*x+2=3x+2 3.(3x+2)*x+1=3x^2+2x+1
#include <iostream>
const long long M=998244353;
using namespace std;
int a[10005];
int main(){
    int n;
    cin>>n;
    for(int i=0;i<=n;i++) cin>>a[i];
    int q;
    cin>>q;
    while(q--){
        int x;
        cin>>x;
        long long ans=0;
        for(int i=n;i>+n;i--) ans=(ans*x+a[[i]])%M;// 拆开来一项一项写,其实就是每个项乘以系数每乘以一遍x就要mod M,以防溢出 
        cout<<ans<<" ";
    }
    return 0;
} 

 

 
 
A题
链接:https://ac.nowcoder.com/acm/contest/11164/A
来源:牛客网

题目描述

小 L 刚考完期末,他写了一篇很烂的作文,烂到老师都不愿意给它扣分,只能给他加分,已知老师比较牛,所以他发现一个字符 x 就会加一分。问你小 L 最后可以得到多少分。

输入描述:

第一行,给你一个字符 x,表示可以加分的字符。
第二行,给你一个字符串 s,表示文章。

输出描述:

一个整数,表示小 L 得了多少分。
示例1

输入

复制
a
ababbbcarsa

输出

复制
4

说明

字符 a 在文章中一共出现 4 次。
对于 30%30\%30% 的数据,满足 ∣S∣≤50|S| \leq 50S50 保证只会出现小写字母。
对于 100%100\%100% 的数据,满足 ∣S∣≤5000|S| \leq 5000S5000 保证只会出现小写字母。
#include <iostream>
using namespace std;
int main(){
	char x;
	string s;
	cin>>x>>s;
	int ans=0;
	for(auto t:s) ans+=t==x;
	cout<<ans;
	return 0;
} //单纯的更简便一些