福州大学第十二届程序设计竞赛 B.完美的数字

Problem B 完美的数字

Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

Bob是个很喜欢数字的孩子,现在他正在研究一个与数字相关的题目,我们知道一个数字的完美度是 把这个数字分解成三个整数相乘A*A*B(0<A<=B)的方法数,例如数字80可以分解成1*1*80,2*2*20 ,4*4*5,所以80的完美度是3;数字5只有一种分解方法1*1*5,所以完美度是1,假设数字x的完美度为d(x),现在给定a,b(a<=b),请你帮Bob求出

S,S表示的是从a到b的所有数字的流行度之和,即S=d(a)+d(a+1)+…+d(b)。

 Input

输入两个整数a,b(1<=a<=b<=10^15)

 Output

输出一个整数,表示从a到b的所有数字流行度之和。

 Sample Input

1  80

 Sample Output

107

暴力跑的话会超时,稍稍转个弯就行啦,每次只要计算头和尾,减一下就OK了,代码如下:

#include<cstdio>
#include<cstring>
typedef __int64 ll;
ll a,b;
int main()
{
	while(~scanf("%I64d%I64d", &a, &b))
	{
		ll sum=b-a+1;
		ll t1, t2;
		for(ll i=2; i*i*i<b; i++)
		{
			if(a/(i*i) < i) t1=i;
			else if(a/(i*i)>=i && a%(i*i)==0) t1=a/(i*i);
			else t1=a/(i*i)+1;
			t2=b/(i*i);
			sum+=t2-t1+1;
		}
		printf("%I64d\n", sum);
	}
	return 0;
} 

时间: 2024-11-05 16:09:15

福州大学第十二届程序设计竞赛 B.完美的数字的相关文章

福州大学第十二届程序设计竞赛 (部分题解)

比赛链接:http://acm.fzu.edu.cn/contest/list.php?cid=144 Problem B 完美的数字 Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description Bob是个很喜欢数字的孩子,现在他正在研究一个与数字相关的题目,我们知道一个数字的完美度是 把这个数字分解成三个整数相乘A*A*B(0<A<=B)的方法数,例如数字80可以分解成1*1*80,2*2*20 ,4*4*5,所以

福州大学第十二届程序设计竞赛题解

A:这题利用单调栈,先预处理出每个位置向下的最远位置,那么每一行单独考虑,每行就相当于一些段的子矩阵个数,利用单调栈维护,每次出栈的时候把大于当前要入栈(高度0的不入栈了)的段的部分计算出来,累加一下答案即可 B:这题可以枚举,因为一个10^15开3方之后是10^5枚举起来是没有问题的,然后枚举一个数字i,等于要计算在max(a, i * i * i)到min(i * i * i, b)区间,有多少个x满足i * i * x在区间内,两边除下减下就能计算出答案了 C:并查集,注意每次合并的时候都

福州大学第十届程序设计竞赛 -- 部分题解

题目传送:福州大学第十届程序设计竞赛 Problem A 神庙逃亡 水题 AC代码: #include<cstdio> #include<cmath> #include<iostream> using namespace std; int s, h, vx, vy; int main() { int w; cin >> w; while(w--){ cin >> s >> h >> vx >> vy; long

北京师范大学第十二届程序设计竞赛

感觉像是个人赛.只是要是个人赛的话他们真的是太牛了... 全然被虐爆了有没有啊. 整体来说题目不是非常难,以下就粘一下代码吧. 队友看的A,看完就发现了水题本质.可是敲的不是非常顺利. ..是由于太久没做比赛么.. #include<algorithm> #include<iostream> #include<cstring> #include<vector> #include<cstdio> #include<cmath> #inc

FZU-2231 平行四边形数 From 福州大学第十三届程序设计竞赛

FZU-Problem 2231 平行四边形数 Accept: 66 Submit: 210 Time Limit: 2000 mSec Memory Limit : 32768 KB Problem Description 在一个平面内给定n个点,任意三个点不在同一条直线上,用这些点可以构成多少个平行四边形?一个点可以同时属于多个平行四边形. Input 多组数据(<=10),处理到EOF. 每组数据第一行一个整数n(4<=n<=500).接下来n行每行两个整数xi,yi(0<=

福州大学第十三届程序设计竞赛_重现

Problem A Calculus Midterm 题意:略 题解:~~ Problem B 翻翻棋 题意:略 题解:~~ Problem C 平行四边形数 题意:略 题解:~~ Problem D 炉石传说 题意:略 题解:最直接的一个做法就是二分图,跑一遍判断是否匹配的数量为n.还可以的一个做法是贪心:先把对手的血量从大到小排,然后对于自己,选一个能满足对方攻击的自身攻击力最小的一个随从,然后不断重复,最后判断有无可选即可. 1 /*zhen hao*/ 2 #include <cstdi

福州大学第十三届程序设计竞赛_重现总结

 Problem C 平行四边形数 Accept: 82    Submit: 425 Time Limit: 2000 mSec    Memory Limit : 32768 KB  Problem Description 在一个平面内给定n个点,任意三个点不在同一条直线上,用这些点可以构成多少个平行四边形?一个点可以同时属于多个平行四边形.  Input 多组数据(<=10),处理到EOF. 每组数据第一行一个整数n(4<=n<=500).接下来n行每行两个整数xi,yi(0<

2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛-B-precise math function

题目描述 喜爱ACM的PBY同学遇到了一道数学难题,已知底数n,请你帮他准确的计算出结果a = nπ(n的π次方),结果保留小数点后x位. 输入描述: 第一行是一个整数t,表示测试实例的个数: 然后是t行输入数据,每行包含两个正整数n和x,表示底数和保留位数. (1 <= t <= 100,1 <= n <= 500,1 <= x <= 6) 输出描述: 对于每组输入数据,分别输出结果a,每个输出占一行. 示例1 输入 3 1 3 7 6 9 1 输出 1.000 45

2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n and q questions. The i-th question is whether P remains balanced after pai and pbi  swapped. Note that questions ar