技术经验分享:CF223C

简介: 技术经验分享:CF223C

"

题意:给出一个数列a【n】,规定一种操作:用其前n项和s【n】覆盖a【n】,一共操作k次,输出数列a。1<=n<=2000,0<=k<=109,0<=ai<=109。

思路:首选想到用矩阵快速幂做,而且针对大数k,我设计了一种方案:储存20~229(230略>109),把k化为2进制,按位&1,是1就加上相应的2^n,很方便有木有?!无奈其复杂度是O(n3)的,当n=200时就差不多TLE了;而且也很耗空间。

由此得出结论:当对数列进行不规则变换时,用矩阵做;当进行纯洁的变换时,还是找规律吧O__O""…

最后找到的规律为:Sn=sum(Xn-i * ai),i=1<=n。Xn-i = C(k-1+n-i,k-1)。

1 // 2013-08-01 20:36:10

2 // 0KB 92ms 1060B

3 // by Siriuslzx

4 #include

5 #include [span style=""color: rgba(0, 0, 255, 1)"">string.h>

6 typedef long long LL;

7

8 const int N = 2005;

9 const int Mod = 1000000007;

10 LL a【N】,x【N】,iv【N】;

11

12 void gcd(LL a, LL b, //代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg1NTY0NA==.html

LL&d, LL &x, LL &y){

13 if(!b){d = a, x = 1, y = 0;}

14 else{

15 gcd(b, a%b, d, y, x);

16 y -= x*(a/b);

17 }

18 }

19 LL inv(LL a, LL n){

20 LL d, x, y;

21 gcd(a, n, d, x, y);

22 return d == 1 ? (x+n)%n : -1;

23 }

24 void init(int n, int k){

25 x【0】 = 1;

26 for(int i = 1; i < n; i++)

27 x【i】 = x【i-1】(k-1+i)%Modiv【i】%Mod;

28 }

29

30 int main(){

31 int n,k,i,j;

32 LL sum;

33 for(i = 1; i < N; i++)

34 iv【i】 = inv(i, Mod);

35 scanf(""%d%d"",&n,&k);

36 for(i = 1; i <= n; i++)

37 scanf(""%I64d"",&a【i】);

38 // 其实当k==0时依然兼容,只是再算感觉浪费

39 if(!k){

40 for(i = 1; i < n; i++)

41 printf(""%I64d "",a【i】);

42 printf(""%I64d\n"",a【n】);

43 return 0;

44 }

45 // 后来把//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDQxMDExNg==.html

中间这段掐了再交,时间还是一样的

46 init(n,k);

47 for(i = 1; i <= n; i++){

48 sum = 0;

49 for(j = 1; j <= i; j++)

50 sum = (sum + x【i-j】*a【j】%Mod)%Mod;

51 if(i != n)

52 printf(""%I64d "",sum);

53 else printf(""%I64d\n"",sum);

54 }

55 return 0;

56 }

通过做这题得到的一个结论:以1为首项的k阶等差数列,An = C(k+n-1,k)。


"
image.png
相关文章
|
应用服务中间件 nginx Docker
使用nginx进行http以及socket端口转发(快速提高docker开发效率)
本文介绍如何使用nginx进行http以及socket端口转发以快速提高docker开发效率
|
机器学习/深度学习 人工智能 算法
小白教程-阿里云快速搭建Stable-Diffusion WebUI环境+免费试用
Stable-Diffusion 是目前热门的AIGC图像生成方案,通过开源与社区共享模型的方式,成为AI艺术与创意产业的重要工具。本文介绍通过阿里云快速搭建SD WebUI的服务,并有免费试用权益,适合新手入门。通过详细步骤指导,帮助读者轻松上手,享受创作乐趣。
2283 0
|
7月前
|
人工智能 缓存 Java
用 AI 搭建秒杀平台后端,一周搞定所有功能(附超详细踩坑记录)
本文分享如何借助AI技术快速搭建电商秒杀平台后端。通过飞算JavaAI,从需求分析到代码生成全流程智能化,大幅提高开发效率。文章详细记录了技术栈选择(Java、Spring Boot、MySQL、Redis)、系统架构设计、缓存机制优化、数据一致性保障及测试调优等环节,解决高并发难题,助开发者高效完成秒杀平台构建并规避常见坑点。
|
Shell Android开发
安卓scheme_url调端:在AndroidManifest.xml 中如何配置 Intent-filter?
为了使Android应用响应vivo和oppo浏览器的Deep Link或自定义scheme调用,需在`AndroidManifest.xml`中配置`intent-filter`。定义启动的Activity及其支持的scheme和host,并确保Activity可由外部应用启动。示例展示了如何配置HTTP/HTTPS及自定义scheme,以及如何通过浏览器和adb命令进行测试,确保配置正确无误。
阿里云域名实名认证需要多长时间通过?
阿里云域名实名认证通常在1天内完成,经测试一般10多分钟即可通过,最慢3-5个工作日。如果你的阿里云账号下有已经通过实名认证的域名信息模板,那么域名实名认证的时间会更快一些,如果是阿里云新账号,之前没有注册过域名,那么填写域名信息模板并等待实名认证,时间就会稍微多一些
|
存储 流计算 Python
使用Django构建即时通讯应用的最简单方法
使用Django构建即时通讯应用的最简单方法
190 1
【合并单元格】纵向合并单元格之前对数组处理【针对饿了么element的table的span-method合并行或列的计算方法】
【合并单元格】纵向合并单元格之前对数组处理【针对饿了么element的table的span-method合并行或列的计算方法】
NotePad++ 使用侧边栏列表替代Tab
NotePad++ 使用侧边栏列表替代Tab
399 0
ElasticSearch DSL Script使用案例分享
the best elasticsearch highlevel java rest api-----bboss       ElasticSearch DSL Script使用案例分享,涉及到的功能点: 脚本片段使用 多行文本使用 添加属性字段 1前言 先看看elastics...
2797 0
|
编译器 C++
解决Visual Studio设置C++标准 但是_cplusplus始终为199711
解决Visual Studio设置C++标准 但是_cplusplus始终为199711
989 0