2020年 ICPC 亚洲区域赛(上海)G-Fibonacci
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+1ng(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相关推荐
- 2018年 ACM/ICPC亚洲区域赛 青岛赛区现场赛 比赛总结
首先祝贺自己收获了ACM生涯中的第二枚铜牌. 首先吐槽一下中石油: 周六早上来到中国石油大学,连个志愿者小姐姐都没看到.(但是看到了女装大佬).报完到之后发现教练少了一张午餐券(要不要这么粗心).为了 ...
- 第43届ACM icpc亚洲区域赛焦作站感想
青岛痛失银牌,焦作又是铜牌一枚,现在想想,前面三个水题,我的原因太大了,老是犯各种zz小错误,明明能秒,却花了大量时间debug,导致三个小时才签完到,最后一个小时,F题的bfs没出来,B题也没出来, ...
- 2020 ICPC亚洲区域赛(沈阳)H-The Boomsday Project(双指针+dp)
H-The Boomsday Project Code1 暴力我为人人区间转移 O{N∑qlogN}O\{N\sum q\log N \}O{N∑qlogN} #include<bits/st ...
- 2020 ICPC亚洲区域赛(沈阳)F-Kobolds and Catacombs(思维+模拟)
F-Kobolds and Catacombs 考虑每一段,先找到最小的,然后把编号小于它的都化为一组,此时有一个最大值需要把小于最大值的在划分进来,然后又有编号小于它的,于是再把编号小于它的划分为一 ...
- 2018ACM/ICPC亚洲区域赛(焦作)F. Honeycomb
目录 F. Honeycomb (2018-ACM/ICPC焦作) F. Honeycomb (2018-ACM/ICPC焦作) Problem F. Honeycomb Input file: st ...
- 第46届ICPC亚洲区域赛(沈阳)L-Perfect Matchings【dp,组合数学】
正题 题目链接:https://ac.nowcoder.com/acm/contest/24346/L 题目大意 有一张2n2n2n个点的完全图,在上面删除一棵生成树,然后求这张图的完全匹配方案数. ...
- 2021 ICPC 昆明(22-4-17) C L E | 第46届ICPC亚洲区域赛(昆明)
ICPC 2021 昆明 传送门 补题计划 CLE, C - Cup of Water prob : 在0-V内随机取数灌满1升水的期望操作次数 idea1: 首先将题给的"在0-V内随机取 ...
- 2014ACM/ICPC亚洲区域赛牡丹江现场赛总结
不知道怎样说起-- 感觉还没那个比赛的感觉呢?如今就结束了. 9号.10号的时候学校还评比国奖.励志奖啥的,由于要来比赛,所以那些事情队友的国奖不能答辩.自己的励志奖班里乱搞要投票,自己又不在,真是无 ...
- 2022 ICPC 亚洲区域赛(杭州)赛后总结
寄!我愿称之为最抽象的一站 20分钟连过两个签到,状态起飞,然后全程坐牢未过一题~~ 不过这次并没有什么遗憾,因为确实够不到铜牌的边缘,看到同校队伍济南站银牌,这一场打铁,我们也就释然了 只能说以后的 ...
最新文章
- 波形的转换与信号处理
- boost::hana::prepend用法的测试程序
- 转 已知两点坐标和半径求圆心坐标程序C++
- artTemplate基本用法
- string函数_C++[06] string成员函数之删除函数erase
- 第10章 文档对象模型DOM 10.2 Document类型
- python 无限循环小程序设计_Python如何实现小程序 无限求和平均
- 测试工具|(本来不想分享的)安卓系统Ping IP工具
- 迅雷手机版苹果版_手机迅雷安卓版下载2019_迅雷手机版下载最新版
- 项目管理的七个工作法则
- 二维矩形件排样算法之最低水平线算法实现
- 滴滴拉屎之后是什么?
- es6中的静态属性和方法
- 模拟电话交换机和IPPBX之间进行连接
- 源码必须会丨一个bug的解决过程,让你明白阅读源码的重要性!
- JS中国标准时间转化为年月日时分秒‘yyyy-MM-dd hh:mm:ss‘
- 灰色马尔科夫链matlab,基于灰色-马尔科夫模型的电力功率预测
- 输入售价后点击计算税费,自动显示在税费输入框!
- 主机连接wifi时,虚拟机VMware如何连接网络
- 活动目录备份|活动目录教程