当前位置: 首页 > wzjs >正文

wordpress simple tag武汉seo广告推广

wordpress simple tag,武汉seo广告推广,做网站开发的提成多少钱,如何做微信网站做广告UVa12298 Super Joker II 题目链接题意输入格式输出格式 分析AC 代码 题目链接 UVa12298 Super Joker II 题意 有一副超级扑克,包含无数张牌。对于每个正合数p,恰好有4张牌:黑桃p,红桃p,梅花p和方块p(分别…

UVa12298 Super Joker II

  • 题目链接
  • 题意
    • 输入格式
    • 输出格式
  • 分析
  • AC 代码

题目链接

  UVa12298 Super Joker II

题意

  有一副超级扑克,包含无数张牌。对于每个正合数p,恰好有4张牌:黑桃p,红桃p,梅花p和方块p(分别用pS、pH、pC 和pD 表示)。没有其他类型的牌。
  给定一个整数n,从4种花色中各选一张牌,问有多少种组合可以使得点数之和等于n。例如,n=24的时候,有一种组合方法是4S+6H+4C+10D,下图所示。
Super Joker II
  不巧的是,有些牌已经丢失(题目会提供已经丢失的牌的列表)。并且为了让题目更有趣,我们还会提供两个正整数a和b,你的任务是按顺序输出n=a, n=a+1, n=a+2, …, n=b时的答案。

输入格式

  输入包含不超过25组数据。每组数据的第一行为3个整数a, b, c,其中c是已丢失的牌的张数。第二行包含c个不同的字符串,即已丢失的牌。这些牌形如pS, pH, pC 或者pD,其中p是一个正合数。输入结束标志为a=b=c=0。最多有一组数据满足a=1, b=50000且c≤10000,其他数据满足1≤a≤b≤100, 0≤c≤10。

输出格式

  对于每组数据,输出p 行,每行一个整数。每组数据后输出一个空行。

分析

  只需要对生成函数理解清楚了,就可以套用快速傅里叶变换(FFT)求解。初次接触FFT的话,推荐看看这篇知乎,GhostLX大佬给出了模板:

void dft(Complex a[])
{for (int i = 0; i < tot; i++){if (i < rev[i])swap(a[i], a[rev[i]]); //只需要交换一次就行了,交换两次等于没有换}for (int mid = 1; mid < tot; mid <<= 1){auto w1 = Complex({cos(PI / mid), sin(PI / mid)});for (int i = 0; i < tot; i += mid * 2){auto wk = Complex({1, 0}); //初始为w(0,mid)for (int j = 0; j < mid; j++, wk = wk * w1) //单位根递推式{auto x = a[i + j], y = wk * a[i + j + mid];a[i + j] = x + y, a[i + j + mid] = x - y;}}}
}

  GhostLX大佬模板的单位根递推式像这样写wk = wk * w1,随着递推加深其实会带来精度误差的。推荐用这个模板:

namespace fft {#include <cmath>#define N 1<<21int res[N], tot;struct complex {double x, y;void operator+= (const complex &t) {x += t.x; y += t.y;}complex operator- (const complex &t) const {return {x - t.x, y - t.y};}complex operator* (const complex &t) const {return {x * t.x - y * t.y, x * t.y + y * t.x};}} a[N], b[N];/*** inv=1时求的是傅里叶变换(DFT),inv=-1时求的是傅里叶逆变换(IDFT)*/void fft(complex (&a)[N], int inv) {for (int i=0, j=0; i<tot; ++i) { // 原地快速bit reversalif(j > i) {complex t = a[i]; a[i] = a[j]; a[j] = t;}int k = tot;while(j & (k >>= 1)) j &= ~k;j |= k;}for(int step=1; step<tot; step<<=1) {// 把每相邻两个“step点DFT”通过一系列蝴蝶变换合并为一个“2*step点DFT”double alpha = inv*M_PI / step;// 为求高效,我们并不是依次执行各个完整的DFT合并,而是枚举下标k// 对于一个下标k,执行所有DFT合并中该下标对应的蝴蝶变换,即通过E[k]和O[k]计算X[k]// 蝴蝶变换参考:http://en.wikipedia.org/wiki/Butterfly_diagramfor(int k=0; k<step; k++) {// 计算omega^kcomplex wk = {cos(alpha*k), sin(alpha*k)};for(int Ek=k; Ek<tot; Ek += step<<1) { // Ek是某次DFT合并中E[k]在原始序列中的下标int Ok = Ek + step; // Ok是该DFT合并中O[k]在原始序列中的下标complex t = wk * a[Ok]; // 蝴蝶变换:x1 * omega^ka[Ok] = a[Ek] - t;  // 蝴蝶变换:y1 = x0 - ta[Ek] += t;         // 蝴蝶变换:y0 = x0 + t}}}}void workFFT(int n, int m) { // a[0, n], b[0, m]int bit = 0;while ((1 << bit) < n + m + 1) ++bit;tot = 1 << bit;fft(a, 1); fft(b, 1);for (int i=0; i<tot; ++i) a[i] = a[i] * b[i]; //点表示法直接运算fft(a, -1); //逆变换,点表示法转换为多项式表示法for (int i=0, j=m+n; i<=j; ++i) res[i]  = a[i].x / tot + 0.5; //向上取整}
}

AC 代码

#include <iostream>
#include <cmath>
using namespace std;#define M 50020
#define N 1<<17
int na, nb, nc, tot; bool f[M] = {false};
struct complex {double x, y;void operator+= (const complex &t) {x += t.x; y += t.y;}complex operator- (const complex &t) const {return {x - t.x, y - t.y};}complex operator* (const complex &t) const {return {x * t.x - y * t.y, x * t.y + y * t.x};}} a[4][N];void fft(complex (&a)[N], int inv) {for (int i=0, j=0, k; i<tot; ++i) {if(j > i) {complex t = a[i]; a[i] = a[j]; a[j] = t;}for (k = tot; j & (k >>= 1); j &= ~k);j |= k;}for(int step=1; step<tot; step<<=1) {double alpha = inv*M_PI / step;for(int k=0; k<step; k++) {complex wk = {cos(alpha*k), sin(alpha*k)};for(int Ek=k; Ek<tot; Ek += step<<1) {int Ok = Ek + step; complex t = wk * a[Ok];a[Ok] = a[Ek] - t; a[Ek] += t;}}}
}void solve() {int bit = 0; tot = (nb<<1) | 1;while ((1 << bit) < tot) ++bit;tot = 1 << bit;for (int i=0; i<tot; ++i) a[0][i] = a[1][i] = a[2][i] = a[3][i] = {i<nb && f[i] ? 1. : 0., 0.};while (nc--) {int v; char h; cin >> v >> h;a[h == 'S' ? 0 : (h == 'H' ? 1 : (h == 'C' ? 2 : 3))][v].x = 0.;}for (int i=0; i<4; ++i) fft(a[i], 1);for (int i=0; i<tot; ++i) a[0][i] = a[0][i] * a[1][i], a[2][i] = a[2][i] * a[3][i];fft(a[0], -1); fft(a[2], -1);for (int i=0; i<tot; ++i) a[0][i] = {i<nb ? a[0][i].x / tot : 0., 0.}, a[2][i] = {i<nb ? a[2][i].x / tot : 0., 0.};fft(a[0], 1); fft(a[2], 1);for (int i=0; i<tot; ++i) a[0][i] = a[0][i] * a[2][i];fft(a[0], -1);for (int i=na; i<=nb; ++i) cout << (long long)(a[0][i].x / tot + .5) << endl;cout << endl;
}int main() {for (int i=2; i*i<M; ++i) if (!f[i]) for (int j=i*i; j<M; j+=i) f[j] = true;while (cin >> na >> nb >> nc && (na || nb || nc)) solve();return 0;
}
http://www.dtcms.com/wzjs/416052.html

相关文章:

  • 优度网站建设竞价托管选择微竞价
  • 网站建设公司代理新品牌进入市场的推广方案
  • 合肥如何做百度的网站推广广告
  • 怎么做pp网站百度上海分公司
  • 做网站版头图片网站的优化
  • 龙华建网站多少钱怎么注册自己公司的网址
  • 国外哪些网站是python做的百度网页版进入
  • 上海网站建设平台济南公司网站推广优化最大的
  • 棕色网站模板深圳网站优化公司
  • 做虾皮网站赚钱吗石家庄网站建设seo
  • vs2017 如何做网站新营销模式有哪些
  • 如何改变wordpress文本的字体颜色搜索引擎排名优化价格
  • 本地网站有什么可以做营销型网站建设总结
  • 政府网站建设与维护网络营销图片
  • 惠州做棋牌网站建设哪家技术好网络广告文案
  • 马云做直销网站吗中国seo谁最厉害
  • solusvm做网站seo友情链接
  • 网站名称可以更换吗网络营销具有哪些特点
  • 中国建设银行招聘信息网站6手机优化大师怎么退款
  • 复制别人网站做第一站广州最新政策
  • fm网站开发竞价托管运营哪家好
  • 翼城网站建设韩国最新新闻
  • 如何写一份食品的网站建设规划淘宝关键词优化工具
  • 西安建设工程信息网是谁开发的seo是什么专业的课程
  • 网站营销工具电商网站建设公司哪家好
  • 做网站 成都中国舆情观察网
  • 模板网站可以做优化热门关键词排名查询
  • 网络文化经营许可证变更北京seo优化排名
  • 网站建设情况介绍一键优化清理手机
  • 网站名称和备案公司名称不一样网站秒收录工具