哈哈哈哈哈哈哈哈哈哈哈哈,终于把这道题补出来了_(:з」∠)_

来写题解啦。

_(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_

哈哈哈哈哈哈,从9月16日打了这个题之后就一直在补这道题,今天终于a了,哈哈哈哈哈哈。

先把代码贴上,有时间再好好写题解,哈哈哈哈哈哈。ヾ(◍°∇°◍)ノ゙ヾ(◍°∇°◍)ノ゙ヾ(◍°∇°◍)ノ゙ヾ(◍°∇°◍)ノ゙ヾ(◍°∇°◍)ノ゙

代码,嘻嘻:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+;
const int mod=;
ll qpow(ll x, int q){
ll res = ;
while(q){
if(q%) res = res*x%mod;
x = x*x%mod;
q /= ;
}
return res;
}
int main(){
int n,m;
ll ans;
while(~scanf("%d%d",&n,&m)){
if(m>n)printf("0\n");
else if(n%==&&m%==||n%==&&m%==)printf("0\n");
else if(n==&&m==)printf("1\n");
else if(m==){
if(n%==)printf("0\n");
else if(n%==){
if((n/)%==)printf("998244352\n");
else printf("1\n");
}
}
else{
ans=;
for(int i=n-m+;i<=n+m-;i+=)
ans=(ans*i)%mod;
ans=(ans*n)%mod;
ll temp=;
for(int i=;i<=m;i++)
temp=(i*temp)%mod;
ll cnt;
cnt=qpow(temp,mod-);
//cout<<"aaaaaaaaaaaaaaaa"<<endl;
ans=ans*cnt%mod;
ans=((n-m)/)%==?ans:-ans;
ans=(ans+mod)%mod;
printf("%lld\n",ans%mod);
}
}
return ;
}

溜啦溜啦,哈哈哈哈哈哈哈哈。

今天来写题解啦。

Trig Function

1000ms

131072K

f(cos(x))=cos(n∗x) holds for all x.

Given two integers n and m, you need to calculate the coefficient of xm in f(x), modulo 998244353.

Input Format

Multiple test cases (no more than 100).

Each test case contains one line consisting of two integers n and m.

1≤n≤10​​9,0≤m≤10​4​​.

Output Format

Output the answer in a single line for each test case.

样例输入

2 0
2 1
2 2

样例输出

998244352
0
2

题目来源

2017 ACM-ICPC 亚洲区(西安赛区)网络赛

题目一开始没看懂什么意思,后来知道是切比雪夫多项式后,才明白题目要求的是什么。

在多项式中求xm的系数。

切比雪夫多项式, 自行百度。

切比雪夫多项式的公式:

公式1:

公式2:

切比雪夫多项式举例:

我是用公式2写的代码。

通过研究这个公式,可以发现:

1.当n和m奇偶性不同的时候,公式结果为0;

2.当m为0的时候可以发现,结果是有规律的。1,0,-1,0,4个一循环,就可以判断if(n%2==1)结果为0,

if((n/2)%2==1),结果为-1,if((n/2)%2==0)结果为1;

3.因为只有n和m同奇或者同偶,用公式计算,通过分析公式2,可以将公式简化。n!!是二阶乘的意思,就是n*(n-2)*(n-4)*(n-6)*...2;

可以将公式上下抵消一部分数,最后可以得到公式的主体部分为n*(n+m-2)*(n+m-2)*...(n-m+2)/m!;

然后就是乘法逆元,将m!逆元,乘法逆元,找度娘。

这个题写的好讨厌,老是小细节出问题,wa了好几好几发_(:з」∠)_

一开始没有将公式优化,也没有用逆元,直接就是超时_(:з」∠)_,改了无数次终于改对了,太菜了,QAQ。

代码解释:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+;
const int mod=;
ll qpow(ll x, int q){ //乘法逆元
ll res = ;
while(q){
if(q%) res = res*x%mod;
x = x*x%mod;
q /= ;
}
return res;
}
int main(){
int n,m;
ll ans;
while(~scanf("%d%d",&n,&m)){
if(m>n)printf("0\n"); //x的次方数最大为n次,超过了就不存在
else if(n%==&&m%==||n%==&&m%==)printf("0\n"); //n和m奇偶性不同的时候结果为0
else if(n==&&m==)printf("1\n"); //如果n和m为0,结果为1
else if(m==){ //如果m为0,就是有规律的
if(n%==)printf("0\n");//如果为奇数,就是0
else if(n%==){ //如果为偶数
if((n/)%==)printf("998244352\n");//除以2之后如果为奇数就是-1,(-1+mod)%mod结果就是这个数
else printf("1\n");//除以2之后如果为偶数就是1
}
}
else{ //其他的通过公式进行计算
ans=;
for(int i=n-m+;i<=n+m-;i+=) //优化之后只需要进行部分操作就可以
ans=(ans*i)%mod;//二阶乘
ans=(ans*n)%mod;//公式
ll temp=;
for(int i=;i<=m;i++)
temp=(i*temp)%mod;//m的阶乘
ll cnt;
cnt=qpow(temp,mod-);//m的阶乘的逆元
//cout<<"aaaaaaaaaaaaaaaa"<<endl;
ans=ans*cnt%mod;//将结果进行相乘
ans=((n-m)/)%==?ans:-ans;//判断正负号
ans=(ans+mod)%mod;
printf("%lld\n",ans%mod);
}
}
return ;
}

作为一个数学渣,做这种题目简直要命_(:з」∠)_

这个题也没用到什么很厉害的算法,就是数学题,大佬们肯定很easy的就过了_(:з」∠)_

加油_(:з」∠)_

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function(切比雪夫多项式+乘法逆元)的更多相关文章

  1. 2017 ACM-ICPC 西安网络赛 F.Trig Function Chebyshev多项式

    自己太菜,数学基础太差,这场比赛做的很糟糕.本来想吐槽出题人怎么都出很数学的题,现在回过头来想还是因为自己太垃圾,竞赛就是要多了解点东西. 找$f(cos(x))=cos(nx)$中$x^m$的系数模 ...

  2. HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)

    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: ...

  3. 【推导】计蒜客17119 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function

    题意:给你n,m,让你求cos(nx)的展开式的(cos(x))^m项的系数. 更一般的式子是这样的:. 队友的代码: #include<cstdio> #include<algor ...

  4. 2014ACM/ICPC亚洲区西安站现场赛 F color(二项式反演)

    题意:小球排成一排,从m种颜色中选取k种颜色给n个球上色,要求相邻的球的颜色不同,求可行的方案数,答案模1e9+7.T组数据,1<= n, m <= 1e9, 1 <= k < ...

  5. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 M. Frequent Subsets Problem【状态压缩】

    2017 ACM-ICPC 亚洲区(南宁赛区)网络赛  M. Frequent Subsets Problem 题意:给定N和α还有M个U={1,2,3,...N}的子集,求子集X个数,X满足:X是U ...

  6. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  7. ICPC 2018 徐州赛区网络赛

    ACM-ICPC 2018 徐州赛区网络赛  去年博客记录过这场比赛经历:该死的水题  一年过去了,不被水题卡了,但难题也没多做几道.水平微微有点长进.     D. Easy Math 题意:   ...

  8. 2016 ACM/ICPC亚洲区大连站-重现赛 解题报告

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5979 按AC顺序: I - Convex Time limit    1000 ms Memory li ...

  9. Skiing 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题(拓扑序求有向图最长路)

    参考博客(感谢博主):http://blog.csdn.net/yo_bc/article/details/77917288 题意: 给定一个有向无环图,求该图的最长路. 思路: 由于是有向无环图,所 ...

随机推荐

  1. iOS 中Block以及Blocks的使用,闭包方法调用

    OC: -(void)dataWithUrl:(NSString*)string AndId:(NSInteger)id returnName:(void(^)(NSString*name))back ...

  2. 一个两年java程序猿的2017个人总结

    前言 又到了一年中最后的日子了,相信有不少公司要求员工写年度总结了,我也不例外.不过个人感觉在公司的写个年度总结来说,过于模板化了.其实很多没有必要.总之,本篇的个人总结,是按照个人的想法写的.简而言 ...

  3. 扩展Microsoft Graph数据结构(开放扩展)

    作者:陈希章 发表于 2018年1月2日 前言 Microsoft Graph是一张拥有巨大价值的网络,它定义了包括Office 365在内的资源的实体及其关系,它的价值体现在,随着用户积累的数据越来 ...

  4. 【WebGL】《WebGL编程指南》读书笔记——第5章

    一.前言        终于到了第五章了,貌似开始越来越复杂了. 二.正文         Example1:使用一个缓冲区去赋值多个顶点数据(包含坐标及点大小) function initVerte ...

  5. split 命令详解

    作用:将大文件切割成小文件. 参数:-l 按照行数分隔文件       -b 按照大小分隔文件       -d 使用数字做后缀 实例:分隔文件默认1000行     split mylog ; wc ...

  6. Android短视频SDK转码实践

    一. 前言 一些涉及的基本概念: 转码:一般指多媒体文件格式的转换,比如分辨率.码率.封装格式等: 解复用(demux):从某种封装中分离出视频track和音频track,然后交给后续模块进行处理: ...

  7. Java中堆与栈

    简单的说:Java把内存划分成两种:一种是栈内存,一种是堆内存. 1:什么是堆内存: 堆内存是是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时 ...

  8. 环形进度条的实现方法总结和动态时钟绘制(CSS3、SVG、Canvas)

    缘由: 在某一个游戏公司的笔试中,最后一道大题是,“用CSS3实现根据动态显示时间和环形进度[效果如下图所示],且每个圆环的颜色不一样,不需要考虑IE6~8的兼容性”.当时第一想法是用SVG,因为SV ...

  9. java的static关键字 – Break易站

    本文内容来自:java的static关键字 – Break易站 (原文网站阅读体验更好) 通过static关键字可以满足两方面的需要.一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多 ...

  10. Hadoop源码篇--Client源码

    一.前述 今天起剖析源码,先从Client看起,因为Client在MapReduce的过程中承担了很多重要的角色. 二.MapReduce框架主类 代码如下: public static void m ...