ICPC 亚洲区域赛(上海)

G-Fibonacci

题目

斐波那契数列为1,1,2,3,5,8,13,21,…

可以看到,这个数列有以下特点:

奇,奇,偶,奇,奇,偶…

当 xxx 与 yyy 相乘为偶数时,g(x,y)=1g(x, y) = 1g(x,y)=1。

计算 ∑i=1n∑j=i+1ng(fi,fj)\sum_{i=1}^n\sum_{j=i+1}^ng(f_i,f_j)∑i=1n​∑j=i+1n​g(fi​,fj​)

第一步

当 xxx 或 yyy 中其中一个为偶数时,他们相乘也为偶数。

当 iii 为偶数时,jjj 从 i+1i+1i+1 到 nnn 与它相乘,得到的结果也为偶数。而 jjj 从 i+1i+1i+1 到 nnn ,一共有 n−in - in−i 个数,因此就有ans += n - i;

当iii 为奇数时,若jjj 从 i+1i+1i+1 到 nnn 中,有 kkk 个偶数,那么答案也会加 kkk 。

那么这个 kkk 怎么求呢?

每三个数中,就有一个数为偶数。在给定的 nnn 个数中,就有 n/3n/3n/3 个数为偶数。

比如,nnn 等于 101010 ,该斐波那契数列为 1,1,2,3,5,8,13,21,34,551,1,2,3,5,8,13,21,34,551,1,2,3,5,8,13,21,34,55 ,其中的偶数只有 2,8,342,8,342,8,34 ,个数刚好为 10/3=310/3 = 310/3=3

因此从第 111 到 iii 个数中,一共有 i/3i/3i/3 个偶数。从第 111 到 nnn 个数中,一共有 n/3n/3n/3 个偶数。

那么,从第 i+1i+1i+1 到 nnn 个数中,有 n/3−i/3n/3-i/3n/3−i/3个偶数,所以 k=n/3−i/3k=n/3-i/3k=n/3−i/3

即,当 iii 为奇数时,有 ans += n/3 - i/3​ ;

然后,就可以写出这样的代码:

#include<bits/stdc++.h>#define int long long
using namespace std;signed main() {int n;cin >> n;int ans = 0;for (int i = 1; i <= n; i++) {if (i % 3 == 0) {ans += (n - i);} else {ans += (n / 3 - i / 3);}}cout << ans << endl;return 0;
}

嗯,毫无意外的超时了。

题目给出的范围是 1≤n≤1091 \leq n \leq 10^91≤n≤109 ,我们O(n)O(n)O(n) 的算法当然会超时。

因此,就有了第二种解法。

第二步

我们依然以 n=10n = 10n=10 为例,

把 iii 从 111 到 nnn 分成三份。

第一份i = 3, 6, 9...

第二份i = 1, 4, 7, 10...

第三份i = 2, 5, 8...


对于第一份的数,都有i%3 == 0,会执行 ans += (n - i)的操作。有kkk个 符合i%3 == 0 的数,就会执行 kkk 次。把它们加起来,就是(n - 3) + (n - 6) + (n - 9) + ... + (n - 3 * k)

根据等差数列求和公式 (a1+an)∗n/2(a_1 + a_n) * n / 2(a1​+an​)∗n/2 ,

可以简化为 k∗n−(3+3∗k)∗k/2k * n - (3 + 3 *k) * k / 2k∗n−(3+3∗k)∗k/2 。

同时,k=n/3k = n/3k=n/3


对于第二份的数,先假设有ppp个,会执行ppp次ans += (n/3 - i/3)的操作。同样,把它们加起来,就是(n/3 - 1/3) + (n/3 - 4/3) + (n/3 - 7/3) + (n/3 - 10/3) + ... + (n/3 - (3 * p - 2)/3)

先简化一下,就是 (n/3 - 0) + (n/3 - 1) + (n/3 - 2) + .. + (n/3 - (p - 1))

根据等差数列求和公式,简化得

p∗n/3−(p−1)∗p/2p*n/3 - (p - 1) * p / 2p∗n/3−(p−1)∗p/2


对于第三份的数,先假设有qqq个,会执行qqq次ans += (n/3 - i/3)的操作。同样,把它们加起来,就是(n/3 - 2/3) + (n/3 - 5/3) + (n/3 - 8/3) +... + (n/3 - (3 * q - 1)/3)

先简化一下,就是(n/3 - 0) + (n/3 - 1) + (n/3 - 2) + ... + (n/3 - (q - 1))

根据等差数列求和公式,简化得

q∗n/3−(q−1)∗q/2q*n/3 - (q-1)*q/2q∗n/3−(q−1)∗q/2


最后,把上面三条简化后的式子相加求和,就得到最终的结果。

实现代码

#include<bits/stdc++.h>#define int long long
using namespace std;signed main() {int n;cin >> n;int ans = 0;int k = n / 3;ans += k * n - ((3 + 3 * k) * k) / 2;int p = k, q = k;if (n % 3 == 2) {p++;q++;} else if (n % 3 == 1) {p++;}ans += p * n - p * (p - 1) / 2;ans += q * n - q * (q - 1) / 2;cout << ans << endl;return 0;
}

所以有没有大佬可以说一下更简单的办法?

2020年 ICPC 亚洲区域赛(上海)G-Fibonacci相关推荐

  1. 2018年 ACM/ICPC亚洲区域赛 青岛赛区现场赛 比赛总结

    首先祝贺自己收获了ACM生涯中的第二枚铜牌. 首先吐槽一下中石油: 周六早上来到中国石油大学,连个志愿者小姐姐都没看到.(但是看到了女装大佬).报完到之后发现教练少了一张午餐券(要不要这么粗心).为了 ...

  2. 第43届ACM icpc亚洲区域赛焦作站感想

    青岛痛失银牌,焦作又是铜牌一枚,现在想想,前面三个水题,我的原因太大了,老是犯各种zz小错误,明明能秒,却花了大量时间debug,导致三个小时才签完到,最后一个小时,F题的bfs没出来,B题也没出来, ...

  3. 2020 ICPC亚洲区域赛(沈阳)H-The Boomsday Project(双指针+dp)

    H-The Boomsday Project Code1 暴力我为人人区间转移 O{N∑qlog⁡N}O\{N\sum q\log N \}O{N∑qlogN} #include<bits/st ...

  4. 2020 ICPC亚洲区域赛(沈阳)F-Kobolds and Catacombs(思维+模拟)

    F-Kobolds and Catacombs 考虑每一段,先找到最小的,然后把编号小于它的都化为一组,此时有一个最大值需要把小于最大值的在划分进来,然后又有编号小于它的,于是再把编号小于它的划分为一 ...

  5. 2018ACM/ICPC亚洲区域赛(焦作)F. Honeycomb

    目录 F. Honeycomb (2018-ACM/ICPC焦作) F. Honeycomb (2018-ACM/ICPC焦作) Problem F. Honeycomb Input file: st ...

  6. 第46届ICPC亚洲区域赛(沈阳)L-Perfect Matchings【dp,组合数学】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/24346/L 题目大意 有一张2n2n2n个点的完全图,在上面删除一棵生成树,然后求这张图的完全匹配方案数. ...

  7. 2021 ICPC 昆明(22-4-17) C L E | 第46届ICPC亚洲区域赛(昆明)

    ICPC 2021 昆明 传送门 补题计划 CLE, C - Cup of Water prob : 在0-V内随机取数灌满1升水的期望操作次数 idea1: 首先将题给的"在0-V内随机取 ...

  8. 2014ACM/ICPC亚洲区域赛牡丹江现场赛总结

    不知道怎样说起-- 感觉还没那个比赛的感觉呢?如今就结束了. 9号.10号的时候学校还评比国奖.励志奖啥的,由于要来比赛,所以那些事情队友的国奖不能答辩.自己的励志奖班里乱搞要投票,自己又不在,真是无 ...

  9. 2022 ICPC 亚洲区域赛(杭州)赛后总结

    寄!我愿称之为最抽象的一站 20分钟连过两个签到,状态起飞,然后全程坐牢未过一题~~ 不过这次并没有什么遗憾,因为确实够不到铜牌的边缘,看到同校队伍济南站银牌,这一场打铁,我们也就释然了 只能说以后的 ...

最新文章

  1. 波形的转换与信号处理
  2. boost::hana::prepend用法的测试程序
  3. 转 已知两点坐标和半径求圆心坐标程序C++
  4. artTemplate基本用法
  5. string函数_C++[06] string成员函数之删除函数erase
  6. 第10章 文档对象模型DOM 10.2 Document类型
  7. python 无限循环小程序设计_Python如何实现小程序 无限求和平均
  8. 测试工具|(本来不想分享的)安卓系统Ping IP工具
  9. 迅雷手机版苹果版_手机迅雷安卓版下载2019_迅雷手机版下载最新版
  10. 项目管理的七个工作法则
  11. 二维矩形件排样算法之最低水平线算法实现
  12. 滴滴拉屎之后是什么?
  13. es6中的静态属性和方法
  14. 模拟电话交换机和IPPBX之间进行连接
  15. 源码必须会丨一个bug的解决过程,让你明白阅读源码的重要性!
  16. JS中国标准时间转化为年月日时分秒‘yyyy-MM-dd hh:mm:ss‘
  17. 灰色马尔科夫链matlab,基于灰色-马尔科夫模型的电力功率预测
  18. 输入售价后点击计算税费,自动显示在税费输入框!
  19. 主机连接wifi时,虚拟机VMware如何连接网络
  20. 活动目录备份|活动目录教程

热门文章

  1. 第2节 物理层基本概念及PacketTracer仿真
  2. 老码识途学习笔记(一)
  3. 【附源码】Python计算机毕业设计美容院管理系统
  4. 顺风车发生交通事故 乘客诉嘀嗒出行索赔3.7万元
  5. 如何安装JDK,最详细JDK安装教程
  6. python实现动态壁纸_利用Python批量提取Win10锁屏壁纸实战教程
  7. Java 经纬度正则
  8. 小学生数学测试软件编写分析,通过C语言编写小学生数学测试软件C语言课程设计...
  9. 阿里云将于云栖大会期间发布Elasticsearch云服
  10. [转] C#开源项目大全