BZOJ3434 [Wc2014]时空穿梭

摔电脑摔电脑!JZP业界毒瘤!

400题纪念~哇终于上400了的说!!!好不容易欸!

题解什么的还是Orz iwtwiioi

我求组合数的方法明明是O(n)的,为什么这么慢!!!令人报警!

喂,话说这题的重点不在求组合数上面吧。。。

 

  1 /**************************************************************
  2     Problem: 3434
  3     User: rausen
  4     Language: C++
  5     Result: Accepted
  6     Time:6888 ms
  7     Memory:140824 kb
  8 ****************************************************************/
  9  
 10 #include <cstdio>
 11 #include <cstring>
 12 #include <algorithm>
 13  
 14 using namespace std;
 15 const int N = 100005;
 16 const int mod = 10007;
 17 const int Tt = 1005;
 18  
 19 int g[21][N], f[21][15][N];
 20 int a[15], p[N], cnt, u[N], mx, mn;
 21 int n[Tt], c[Tt], m[Tt][15];
 22 int C[N][20];
 23 int ans;
 24 bool vis[N];
 25  
 26 inline int read() {
 27   int x = 0, sgn = 1;
 28   char ch = getchar();
 29   while (ch < '0' || '9' < ch) {
 30     if (ch == '-') sgn = -1;
 31     ch = getchar();
 32   }
 33   while ('0' <= ch && ch <= '9') {
 34     x = x * 10 + ch - '0';
 35     ch = getchar();
 36   }
 37   return sgn * x;
 38 }
 39  
 40 int pow(int x, int y) {
 41   int res = 1;
 42   while (y) {
 43     if (y & 1) (res *= x) %= mod;
 44     (x *= x) %= mod;
 45     y >>= 1;
 46   }
 47   return res;
 48 }
 49  
 50 void get_f(int N) {
 51   int i, j, k, l;
 52   for (u[1] = 1, i = 2; i <= N; ++i) {
 53     if (!vis[i])
 54       p[++cnt] = i, u[i] = -1;
 55     for (j = 1; j <= cnt; ++j) {
 56       if ((k = i * p[j]) > N) break;
 57       vis[k] = 1;
 58       if (i % p[j] == 0) {
 59     u[k] = 0;
 60     break;
 61       }
 62       u[k] = -u[i];
 63     }
 64   }
 65   for (C[0][0] = i = 1; i <= N; ++i)
 66     for (C[i][0] = j = 1; j < 19; ++j)
 67       C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;
 68    
 69   for (l = 2; l <= 20; ++l)
 70     for (i = 1; i <= N; ++i)
 71       for (j = i, k = 1; j <= N; j += i, ++k)
 72     (g[l][j] += C[i - 1][l - 2] * u[k]) %= mod;
 73   for (i = 1; i <= N; ++i)
 74     for (l = 2; l <= 20; ++l) {
 75       k = 1;
 76       for (j = 1; j <= 12; ++j) {
 77     f[l][j][i] = (f[l][j][i - 1] + k * g[l][i]) % mod;
 78     (k *= i) %= mod;
 79       }
 80     }
 81 }
 82  
 83 void calc(int i, int x) {
 84   memset(a, 0, sizeof(a));
 85   a[1] = 1;
 86   int d1, d2, t, j, k;
 87   for (k = 1; k <= n[i]; ++k) {
 88     t = m[i][k] / x;
 89     d1 = (1ll * t * m[i][k]) % mod;
 90     d2 = (1ll * t * (t + 1) >> 1) % mod;
 91     for (j = n[i] + 1; j > 1; --j)
 92       a[j] =(a[j] * d1 - a[j - 1] * d2) % mod;
 93     (a[1] *= d1) %= mod;
 94   }
 95 }
 96  
 97 int main() {
 98   int i, j, k, l, T;
 99   T = read();
100   for (i = 1; i <= T; ++i) {
101     n[i] = read(), c[i] = read();
102     for (j = 1; j <= n[i]; ++j)
103       m[i][j] = read(), mx = max(mx, m[i][j]);
104   }
105   get_f(mx);
106  
107   for (i = 1; i <= T; ++i) {
108     ans = 0;
109     for (mn = m[i][1], j = 2; j <= n[i]; ++j)
110       mn = min(mn, m[i][j]);
111     for (j = 1; j <= mn; j = k + 1) {
112       k = mn + 1;
113       for (l = 1; l <= n[i]; ++l)
114     k = min(k, m[i][l] / (m[i][l] / j));
115       calc(i, j);
116       for (l = 1; l <= n[i] + 1; ++l)
117     (ans += a[l] * (f[c[i]][l][k] - f[c[i]][l][j - 1])) %= mod;
118     }
119     ans %= mod;
120     printf("%d\n", (ans += mod) %= mod);
121   }
122   return 0;
123 }
View Code(递推求组合数)

 

  1 /**************************************************************
  2     Problem: 3434
  3     User: rausen
  4     Language: C++
  5     Result: Accepted
  6     Time:9596 ms
  7     Memory:134184 kb
  8 ****************************************************************/
  9  
 10 #include <cstdio>
 11 #include <cstring>
 12 #include <algorithm>
 13   
 14 using namespace std;
 15 const int N = 100005;
 16 const int mod = 10007;
 17 const int Tt = 1005;
 18   
 19 int g[21][N], f[21][15][N];
 20 int a[15], p[N], cnt, u[N], mx, mn;
 21 int n[Tt], c[Tt], m[Tt][15];
 22 int fac[N], faci[N], sum[N];
 23 int ans;
 24 bool vis[N];
 25   
 26 inline int read() {
 27   int x = 0, sgn = 1;
 28   char ch = getchar();
 29   while (ch < '0' || '9' < ch) {
 30     if (ch == '-') sgn = -1;
 31     ch = getchar();
 32   }
 33   while ('0' <= ch && ch <= '9') {
 34     x = x * 10 + ch - '0';
 35     ch = getchar();
 36   }
 37   return sgn * x;
 38 }
 39   
 40 int pow(int x, int y) {
 41   int res = 1;
 42   while (y) {
 43     if (y & 1) (res *= x) %= mod;
 44     (x *= x) %= mod;
 45     y >>= 1;
 46   }
 47   return res;
 48 }
 49   
 50 inline int C(int x, int y) {
 51   if (y == 0) return 1;
 52   if (x < y) return 0;
 53   if (sum[x] != sum[y] + sum[x - y]) return 0;
 54   return fac[x] * faci[y] % mod * faci[x - y] % mod;
 55 }
 56   
 57 void get_f(int N) {
 58   int i, j, k, l;
 59   for (u[1] = 1, i = 2; i <= N; ++i) {
 60     if (!vis[i])
 61       p[++cnt] = i, u[i] = -1;
 62     for (j = 1; j <= cnt; ++j) {
 63       if ((k = i * p[j]) > N) break;
 64       vis[k] = 1;
 65       if (i % p[j] == 0) {
 66     u[k] = 0;
 67     break;
 68       }
 69       u[k] = -u[i];
 70     }
 71   }
 72   fac[0] = faci[0] = 1;
 73   for (fac[1] = 1, i = 2; i <= N; ++i)
 74     if (i % mod == 0) {
 75       sum[i] = sum[i - 1] + 1;
 76       fac[i] = fac[i - 1] * (i / mod) % mod;
 77     } else {
 78       sum[i] = sum[i - 1];
 79       fac[i] = fac[i - 1] * i % mod;
 80     }
 81   for (faci[N] = pow(fac[N], mod - 2),i = N - 1; i; --i)
 82     if ((i + 1) % mod == 0)
 83       faci[i] = faci[i + 1] * ((i + 1) / mod) % mod;
 84     else faci[i] = faci[i + 1] * (i + 1) % mod;
 85   
 86   for (l = 2; l <= 20; ++l)
 87     for (i = 1; i <= N; ++i)
 88       for (j = i, k = 1; j <= N; j += i, ++k)
 89     (g[l][j] += C(i - 1, l - 2) * u[k]) %= mod;
 90   for (i = 1; i <= N; ++i)
 91     for (l = 2; l <= 20; ++l) {
 92       k = 1;
 93       for (j = 1; j <= 12; ++j) {
 94     f[l][j][i] = (f[l][j][i - 1] + k * g[l][i]) % mod;
 95     (k *= i) %= mod;
 96       }
 97     }
 98 }
 99   
100 void calc(int i, int x) {
101   memset(a, 0, sizeof(a));
102   a[1] = 1;
103   int d1, d2, t, j, k;
104   for (k = 1; k <= n[i]; ++k) {
105     t = m[i][k] / x;
106     d1 = (1ll * t * m[i][k]) % mod;
107     d2 = (1ll * t * (t + 1) >> 1) % mod;
108     for (j = n[i] + 1; j > 1; --j)
109       a[j] =(a[j] * d1 - a[j - 1] * d2) % mod;
110     (a[1] *= d1) %= mod;
111   }
112 }
113   
114 int main() {
115   int i, j, k, l, T;
116   T = read();
117   for (i = 1; i <= T; ++i) {
118     n[i] = read(), c[i] = read();
119     for (j = 1; j <= n[i]; ++j)
120       m[i][j] = read(), mx = max(mx, m[i][j]);
121   }
122   get_f(mx);
123   
124   for (i = 1; i <= T; ++i) {
125     ans = 0;
126     for (mn = m[i][1], j = 2; j <= n[i]; ++j)
127       mn = min(mn, m[i][j]);
128     for (j = 1; j <= mn; j = k + 1) {
129       k = mn + 1;
130       for (l = 1; l <= n[i]; ++l)
131     k = min(k, m[i][l] / (m[i][l] / j));
132       calc(i, j);
133       for (l = 1; l <= n[i] + 1; ++l)
134     (ans += a[l] * (f[c[i]][l][k] - f[c[i]][l][j - 1])) %= mod;
135     }
136     ans %= mod;
137     printf("%d\n", (ans += mod) %= mod);
138   }
139   return 0;
140 }
View Code(奇怪的组合数求法)

(p.s. 关于那种空间较小的求组合数的方法为什么慢了3秒我也是无言以对。。。)

转载于:https://www.cnblogs.com/rausen/p/4294603.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像平滑滤波

卷积与滤波概念 离散卷积 丢两个骰子&#xff0c;求点数加起来为 ttt 的概率是多少&#xff1f; 两个骰子加起来为4的概率&#xff1a; f(1)g(3)f(2)g(2)f(3)g(1)f(1)g(3) f(2)g(2) f(3)g(1)f(1)g(3)f(2)g(2)f(3)g(1) 写成卷积标准形式为&#xff1a; (f∗g)(4)∑i13f(i)g(…

从全球制造业的迁移史,看中国制造业未来会怎么走?

来源&#xff1a;挖数&#xff08;ID&#xff1a;washu66&#xff09;摘要&#xff1a;中国制造后续如何发展&#xff1f;翻开全球制造业的迁移史&#xff0c;看是否能从中看出一点端倪。1/ 全球制造业的迁移史1/ 第一次大迁移第一次制造业大迁移发生在20世纪初&#xff0c;由美…

应用|5G时代10大应用场景!

来源&#xff1a;数字化企业摘要&#xff1a;5G商用日益临近&#xff0c;大家可曾想过5G技术未来有哪些具体的应用场景呢&#xff1f;作为5G领跑者的华为公司&#xff0c;早在2年前就出了一份白皮书&#xff0c;这份报告探讨了最能体现5G能力的十大应用场景。简要列表如下1.云V…

央行发布论文:区块链能做什么,不能做什么?

来源&#xff1a;悟空智能科央行发布工作论文《区块链能做什么、不能做什么&#xff1f;》&#xff0c;论文称&#xff0c;不要夸大或迷信区块链的功能。区块链应用要立足实际情况。目前区块链投融资领域泡沫明显。论文从经济学角度研究了区块链的功能。首先&#xff0c;在给出…

UVa 1225 Digit Counting

题意&#xff1a;给出n,将前n个整数顺次写在一起&#xff0c;统计各个数字出现的次数。 用的最笨的办法--直接统计-- 后来发现网上的题解有先打表来做的 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 us…

人工智能产业发展联盟公布首轮AI芯片基准评测结果,评估工具已开源

来源&#xff1a;量子位3月6日&#xff0c;由国际电信联盟、中国信息通信研究院联合主办&#xff0c;人工智能产业发展联盟&#xff08;AIIA&#xff09;和中兴通讯承办的国际论坛“AI in 5G——引领新时代论坛”在深圳召开。来自全球电信运营商、标准组织、互联网企业、设备厂…

图像分割I

为什么要图像分割&#xff1f; 目标 掌握图像分割的基本概念了解图像分割方法分类 目标&#xff1a;将图像划分为不同区域定义&#xff1a;令集合R代表整个图像区域&#xff0c;对R的图像分割可以看作是将R分成N个满足以下条件的非空子集R1,R2,...,RNR_1,R_2,...,R_NR1​,R2​…

图像分割II

区域增长算法 目标 掌握区域生长法的基本思想掌握图像分裂合并分割的基本思想及步骤 区域生长法分割 大津算法的局限性&#xff1a;噪声比较严重的图片、分割目标颜色渐变的情况&#xff0c;分割效果差。 区域生长&#xff1a;从种子点开始&#xff0c;按照一定准则&#x…

205页PPT,看5G+AI引领的下一个时代!

来源&#xff1a;国泰君安证券、暴点摘要&#xff1a;为大家分享一份国泰君安证券关于“电子行业2019年春季投资策略&#xff0c;5GAI系列研究”报告&#xff0c;详看哪些产业将迎来黄金期。预计5G换机高峰期将出现在2020~2023年&#xff0c;届时手机出货量将恢复增长。同时&am…

图像表示与描述

图像表示与描述 目标 掌握常见的基于轮廓特征的描述掌握常见的图像区域特征描述 对目标特征的测量是要利用分割结果进一步从图像中获取有用信息&#xff0c;为达到这个目的需要解决两个关键问题&#xff1a; 选用什么特征来描述目标(定性)如何精确测量这些特征(定量) 常见…

RISV-V未来将面临怎样的挑战?

来源&#xff1a;MoneyDJ、半导体行业观察继大陆的RISC-V联盟成立之后&#xff0c;台湾RISC-V联盟也在今年正式成立&#xff0c;这也让RISC-V的议题热度逐渐加温&#xff0c;事实上这也是许多人看好能够足以与ARM竞争的架构&#xff0c;加上目前许多国际大厂陆续采用RISC-V架构…

使用matlab程序,基于标准卡标定感压纸的压力分布

任务说明 使用富士感压纸(压力测试纸)测量压力&#xff0c;感压纸受压时会显现颜色&#xff0c;根据峰值应力呈现不同的颜色深度。感压制提供了标准比色卡&#xff0c;给出不同颜色深度对应的压力值。 要求使用matlab&#xff0c;对照标准比色卡&#xff0c;对实验中使用的比…

斯坦福大学陈丹琦等人解读机器阅读最新进展:超越局部模式匹配

来源&#xff1a;AI 科技评论不久前&#xff0c;斯坦福大学的计算机科学博士陈丹琦的一篇长达 156 页的毕业论文《Neural Reading Comprehension and Beyond》成为「爆款文章」&#xff0c;一时引起了不小轰动。而本文是她与同样师从 Christopher Manning 的同学 Peng Qi 一起发…

智能网联产业链深度报告

来源&#xff1a;智车科技未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#…

史上最全的物理学科普(值得收藏)

来源&#xff1a;中科院物理所&#xff08;ID&#xff1a;cas-iop&#xff09;本文素材主要摘录自加来道雄的《Hypersapce》和丘成桐的《The Shape of Inner Space》。作者希望凭籍本文&#xff0c;回顾一下两百年来的科学史&#xff0c;看看那些代表着人类最高心智的数学家、物…

量子通信是不是伪科学?潘建伟这样回应

来源&#xff1a;科技日报“墨子号”发射快三年了&#xff0c;到底有什么新发现&#xff1f;量子通信和公众有什么关联&#xff0c;到底是不是伪科学&#xff1f;10日&#xff0c;在全国政协十三届二次会议举行的记者会上&#xff0c;全国政协委员、中国科学技术大学常务副校长…

AI如何设计,才能人类利益最大化?

来源&#xff1a;国机智能机器人曾为现代互联网早期协议和架构设计做出贡献的Vint Cerf&#xff0c;用一个寓言来解释为什么在人工智能等新兴技术出现后&#xff0c;勇敢的领导力至关重要。想象一下&#xff0c;你住在一个被群山环绕的山谷底部的小社区里。在远处的山顶上有一块…

编译 | 5G时代的游戏世界:一年后的AR与VR将会发生的几个变化

来源&#xff1a;spectrum5G已不再是研发中的技术&#xff0c;它已经离我们非常的近&#xff0c;全球许多运营商都在都在部署这一新技术。那么我们可以从这个新一代无线系统中得到什么&#xff1f;不只是更好的智能手机服务。许多公司&#xff0c;比如德国电信&#xff0c;诺基…

《麻省理工科技评论》发布“21世纪迄今十大最糟科技”

来源&#xff1a;网络大数据必须承认&#xff0c;人类总会犯错&#xff0c;在科技的发展上也是一样。所以&#xff0c;当最新一期的《麻省理工科技评论》评出今天这份“ 2000-2019 年糟糕科技清单”时&#xff0c;你千万不要以为这是一件容易的事情。如果某项科技没有达到让人欣…

javascript Array对象

一&#xff0c;创建数组对象 JavaScript的数组支持了对任何数据类型的支持&#xff0c;并不会像java&#xff0c;C#那样指定了数组类型只能存储这种类型。 我们可以使用以下三种方法来创建JavaScript数组对象&#xff0c; 1&#xff0c;var arrnew Array(); 2 , var arrnew Arr…