2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function(切比雪夫多项式+乘法逆元)
哈哈哈哈哈哈哈哈哈哈哈哈,终于把这道题补出来了_(:з」∠)_
来写题解啦。
_(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_
哈哈哈哈哈哈,从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 ;
}
溜啦溜啦,哈哈哈哈哈哈哈哈。
今天来写题解啦。
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≤109,0≤m≤104.
Output Format
Output the answer in a single line for each test case.
样例输入
2 0
2 1
2 2
样例输出
998244352
0
2
题目来源
题目一开始没看懂什么意思,后来知道是切比雪夫多项式后,才明白题目要求的是什么。
在多项式中求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(切比雪夫多项式+乘法逆元)的更多相关文章
- 2017 ACM-ICPC 西安网络赛 F.Trig Function Chebyshev多项式
自己太菜,数学基础太差,这场比赛做的很糟糕.本来想吐槽出题人怎么都出很数学的题,现在回过头来想还是因为自己太垃圾,竞赛就是要多了解点东西. 找$f(cos(x))=cos(nx)$中$x^m$的系数模 ...
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others) Memory Limit: ...
- 【推导】计蒜客17119 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function
题意:给你n,m,让你求cos(nx)的展开式的(cos(x))^m项的系数. 更一般的式子是这样的:. 队友的代码: #include<cstdio> #include<algor ...
- 2014ACM/ICPC亚洲区西安站现场赛 F color(二项式反演)
题意:小球排成一排,从m种颜色中选取k种颜色给n个球上色,要求相邻的球的颜色不同,求可行的方案数,答案模1e9+7.T组数据,1<= n, m <= 1e9, 1 <= k < ...
- 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 ...
- 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
- ICPC 2018 徐州赛区网络赛
ACM-ICPC 2018 徐州赛区网络赛 去年博客记录过这场比赛经历:该死的水题 一年过去了,不被水题卡了,但难题也没多做几道.水平微微有点长进. D. Easy Math 题意: ...
- 2016 ACM/ICPC亚洲区大连站-重现赛 解题报告
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5979 按AC顺序: I - Convex Time limit 1000 ms Memory li ...
- Skiing 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题(拓扑序求有向图最长路)
参考博客(感谢博主):http://blog.csdn.net/yo_bc/article/details/77917288 题意: 给定一个有向无环图,求该图的最长路. 思路: 由于是有向无环图,所 ...
随机推荐
- grep 、find 、tree 新发现
[root@localhost tftpboot]# ip address | grep -A 1 " eno16777736"2: eno16777736: <BROADC ...
- nova创建虚拟机源码分析系列之五 nova源码分发实现
前面讲了很多nova restful的功能,无非是为本篇博文分析做铺垫.本节说明nova创建虚拟机的请求发送到openstack之后,nova是如何处理该条URL的请求,分析到处理的类. nova对于 ...
- Windows as a Service(1)—— Windows 10服务分支
前言 作为公司的IT管理员,管理全公司Windows 10操作系统的更新一直是工作中的头疼之处.微软提供了很多方法来帮助我们管理公司的Windows 10更新,比如Windows Server Upd ...
- JavaScript构造函数、继承的理解
前两天稍微深入一点点理解了原型和原型链,然后就开始有挺多疑问的: function dog() { this.name = "huahua"; } var cat = new do ...
- HTTPS加密流程超详解(二)
2.进入正题 上篇文章介绍了如何简单搭建一个环境帮助我们分析,今天我们就进入正题,开始在这个环境下分析. 我们使用IE浏览器访问Web服务器根目录的test.txt文件并抓包,可以抓到如下6个包(前面 ...
- ValueError: too many values to unpack (expected 2)
记录下总是码错的地方 for key,value in final_table:#final_table is a dict 然后报错 File "./count_co_Mty_read_n ...
- h5拖拽上传图片
h5实现拖拽上传图片 本文将为大家介绍如何通过js实现拖拽上传图片. 首先我们要禁用调浏览器默认的拖拽事件: window.onload = function(){ //拖离 document.add ...
- SpiderMonkey js引擎的静态编译与使用
原文出处: http://yaolixing.oltag.com/gns-8ABFFE2D-EB1E-44FA-9118-217ED7959536.html 几百KB的跨平台js引擎,是不是您心之所想 ...
- Yii 框架学习--03 多应用多模块
本文以YII 2.0.7为例. 概述 首先看看多应用和多模块的特点: 多应用的特点: 独立配置文件 独立域名 多模块的特点: 统一配置文件 统一域名 那么,实际该怎么决定使用多应用还是多模块呢? 对于 ...
- python词云的制作方法
第一次接触到词云主要是觉得很好看,就研究了一下,官方给出了代码的,但是新手看的话还是有点不容易,我们来尝试下吧. 环境:python2.7 python库:PIL(pillow),numpy,matp ...