题意:

给定一些扑克牌,问这些扑克牌选四色能组成n的方案数,其中遗失了c张牌,这c张不能用,问n从a到b的方案数。

思路:

分析每一种花色,那么每种花色组成的方案数即为x^1+x^2+x^3+x^5(改花色的牌只有1,2,3,5这四张的时候),那么对比于其他的花色,也是一样,四个花色的方案数相乘,即为所得值,那么很容易来使用FFT,注意可能会超精度,复数要用long double。

code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;const long double PI=acos(-1.0);
typedef long double ld;struct complex
{long double l,r;complex(ld ll=0.0,ld rr=0.0){l=ll;r=rr;}complex operator +(const complex& B){return complex(l+B.l,r+B.r);}complex operator - (const complex& B){return complex(l-B.l,r-B.r);}complex operator *(const complex& B){return complex(l*B.l-r*B.r,l*B.r+B.l*r);}
};/** 进行FFT和IFFT前的反转变换。* 位置i和j(i二进制反转后位置)互换* len必须是2的幂*/
void change(complex y[],int len){int i,j,k;for (int i=1,j=len/2;i<len-1;i++){if (i<j) swap(y[i],y[j]);k=len/2;while (j>=k){j-=k;k>>=1;}if (j<k) j+=k;}
}
/** 做FFT* len必须为2^k形式,* on==1时是DFT,on==-1时是IDFT*/
void fft(complex y[],int len,int on){change(y,len);for (int h=2;h<=len;h<<=1){complex wn(cos(-on*2*PI/h),sin(-on*2*PI/h));for (int j=0;j<len;j+=h){complex w(1,0);for (int k=j;k<j+h/2;k++){complex u=y[k];complex t=w*y[k+h/2];y[k]=u+t;y[k+h/2]=u-t;w=w*wn;}}}if (on==-1){for (int i=0;i<len;i++){y[i].l/=len;}}
}const int N=262144;
const int M=50005;
complex s[N],c[N],d[N],h[N];
int vis[M],pri[M],tot;
void getP(int n){memset(vis,0,sizeof(vis));tot=0;//vis[0]=vis[1]=1;for (int i=2;i<n;i++){if (!vis[i]) pri[tot++]=i;for (int j=0;j<tot&&i*pri[j]<n;j++){vis[i*pri[j]]=1;if (i%pri[j]==0) break;}}
}int main()
{getP(M);int A,B,C;while (~scanf("%d%d%d",&A,&B,&C),A+B+C){int len=1;while(len<=B) len<<=1;len<<=2;for (int i=0;i<=len;i++) s[i]=h[i]=c[i]=d[i]=complex(0,0);for(int i=0; i<B; ++i) if(vis[i]) s[i]=h[i]=c[i]=d[i]=complex(1,0);for (int i=0;i<C;i++){char ch[3];scanf("%s",ch);int ln=strlen(ch),t;sscanf(ch,"%d",&t);if (ch[ln-1]=='S') s[t].l=0;if (ch[ln-1]=='H') h[t].l=0;if (ch[ln-1]=='C') c[t].l=0;if (ch[ln-1]=='D') d[t].l=0;}fft(s,len,1);fft(h,len,1);fft(c,len,1);fft(d,len,1);for (int i=0;i<=len;i++) h[i]=h[i]*s[i]*c[i]*d[i];fft(h,len,-1);for (int i=A;i<=B;i++) printf("%.0f\n",fabs((double)h[i].l));puts("");}
}

UVA 12298——Super Poker II相关推荐

  1. UVA12298 Super Poker II(多项式/背包问题)

    UVA12298 Super Poker II 这应该是最水的背包问题了吧 然后有一个小问题就是这道题没有给模数,然后答案会爆int,所以我们需要MTT,然后开long long就好了,或者直接fft ...

  2. 全触控HIFI级音质,击音Super HD II,你喜欢的样子我都有!

    在无聊的时间段中,很多人都会利用音乐来缓解枯燥,让生活不再显得单调乏味.但是在公共的场合下,用手机大声的播放音乐总是会感觉不太好,不仅干扰到了其他人,而且还降低了自己听音乐的体验.其实在这个时候,选择 ...

  3. HIFI音质听得见,击音Super HD II续航强悍或将成为2021爆款

    转眼2020年已经过去了,回想这一年无数的耳机品牌将产品接二连三的发布,主攻蓝牙耳机类型就不胜枚举.每一款都具有独特的优势,冬季来临之际,最享受的就是一个人静静的待在院子里听着熟悉的旋律.走进音乐,整 ...

  4. UVA 10269 Super Mario,最短路+动态规划

    这个题目我昨晚看到的,没什么思路,因为马里奥有boot加速器,只要中间没有城堡,即可不耗时间和脚力,瞬间移动不超过L距离,遇见城堡就要停下来,当然不能该使用超过K次...我纠结了很久,最终觉得还是只能 ...

  5. UVA 10624 Super Number

    UVA_10624 由于一开始直接回溯超时了,所以对部分数据进行了打表. #include<stdio.h>#include<string.h>int m,n,a[35];in ...

  6. UVA 11426 GCD - Extreme (II) (欧拉函数)

    题目传送门:点击打开链接 假设a.b(a<b)互质,那么gcd(a,b)=1,这样当i循环到a.j循环到b时就会向结果中+1,而i循环到2*a.j循环到2*b时就会向结果中+2(gcd(2*a, ...

  7. 2018十二月刷题列表

    Preface \(2018\)年的尾巴,不禁感慨自己这一年的蜕变只能用蜕变来形容了. 而且老叶说我们今年没的参加清北冬令营可以参加CCF在广州二中举办的冬令营,只要联赛\(390+\)就应该可以报. ...

  8. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

  9. sicily题目分类

    sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...

最新文章

  1. 未能使用“Csc”任务的输入参数初始化该任务
  2. 设计模式 -(5)装饰模式(结构型)
  3. python 计时_Python计时相关操作详解【time,datetime】
  4. HDU2206:IP的计算
  5. Security+ 学习笔记17 公钥基础设施
  6. Cannot assign configuration entry 'pluginArtifacts' with value '${plugin.artifacts}' of type java.ut
  7. Atitit 企业战略目标的艺术 目录 1. 企业战略目标 1 2.  特点 ▪ 宏观性 ▪ 长期性 ▪ 全面性 稳定性 1 3. 内容 2 3.1. 彼得·德鲁克在《管理实践》一书中提出了八个
  8. Django图书商城项目/图书管理/毕业设计
  9. win10进入pe模式系统的操作方法
  10. 数商云在线供应链系统服务方案:构建企业供应链平台业务、功能、技术管理架构
  11. 图书管理系统需求规格说明文档目录_一个已经超越普通设计素材管理范畴的文档管理软件—Eagle...
  12. 阿里云物联网平台MQTT教程
  13. 静态路由的配置 简单实验图解
  14. 认识计算机选题背景,与计算机专业相关的论文_计算机专业的毕业论文题目有哪些_大一我对计算机的认识3000字论文...
  15. 数据挖掘 第四篇:OLS回归分析
  16. android如何设置软件的版本,android如何实现对软件版本的配置
  17. 发刊词 | 你能从这门课听到什么
  18. pandas ix与iloc
  19. 获取本地json文件
  20. 4G编码器在移动户外直播推流解决方案

热门文章

  1. vue获取DOM元素并设置属性
  2. sessionStorage什么时候失效
  3. Python学习笔记----基础篇10----模块2
  4. Java Platform Standard Edition 8 Documentation
  5. laravel里面使用event
  6. 充实的日子里忙忙碌碌
  7. mysql pxc_MySQL之PXC集群搭建
  8. java setsession_Java Session.setServerAliveInterval方法代码示例
  9. 大头贴计算机教程,推荐!自家电脑也能拍大头贴的秘密
  10. html回复评论_3天内看了3000多篇《哈佛商业评论》,挑出来最有用的分享下