2193 So Hard
题意:
化简小数。
思路:
最多不超过9位,那么乘以10^9就好了。
然后注意的就是加一下精度。
代码:
#include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"queue" #include"algorithm" #include"iostream" #include"map" #define ll __int64 #define eps 1e-11 using namespace std; ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); } int main() { int t; cin>>t; while(t--) { double x; scanf("%lf",&x); ll fz=(ll)((x+eps)*1000000000); ll fm=1000000000; ll tep=gcd(fz,fm); printf("%I64d/%I64d\n",fz/tep,fm/tep); } return 0; }
2191 完美的数字
题意:
[a,b]区间内每个数的完美度的和。
所谓完美度就是X能够分解成多少个A*A*B(0<A<=B)的个数。
思路:
对于[1,x]区间内。
我们枚举A。
因为A<=B 对于每个i,所以若要成立,最小的数是i*i*i
然而我们只要判断i*i*i<=x 的范围内,包含多少个i*i。
对于每个i*i-i+1。
然后相减一下。
代码:
#include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"queue" #include"algorithm" #include"iostream" #include"map" #define ll __int64 #define eps 1e-11 using namespace std; int main() { ll x,y; while(scanf("%I64d%I64d",&x,&y)!=-1) { ll ansx=0,ansy=0; x--; for(ll i=1;i*i*i<=x;i++) ansx+=x/(i*i)-i+1; for(ll i=1;i*i*i<=y;i++) ansy+=y/(i*i)-i+1; printf("%I64d\n",ansy-ansx); } return 0; }
时间: 2024-11-09 02:07:27