• [CSP-S模拟测试]:凉宫春日的忧郁(乱搞)


    题目传送门(内部题101)


    输入格式

      第一行输入一个整数$T$,表示数据组数。
      接下来$T$行,每行两个数$X,Y$,表示$T$组数据。


    输出格式

      输出共有$T$行,对于每一组数据,如果$X^Yleqslant Y!$,输出$Yes$,否则输出$No$。


    样例

    样例输入1:

    3
    1 4
    2 4
    3 4

    样例输出1:

    Yes
    Yes
    No

    样例输入2:

    5
    50 100
    37 100
    200 1000
    400 1000
    20000 100000

    样例输出2:

    No
    Yes
    Yes
    No
    Yes


    数据范围与提示

      对于$50\%$的数据,满足$Xleqslant 8,Yleqslant 10$。
      对于$80\%$的数据,满足$X,Yleqslant 300$。
      对于$100\%$的数据,满足$X,Yleqslant 10^5,Tleqslant 5$。


    题解

    好吧,我承认我真的很会(bu)乱(yao)搞(lian)

    比较两个数大小的其中一种方法就是做比,如果比值大于$1$,则作为分子的数大。

    于是我们可以暴力做比。

    直接暴力大家都会,用阶乘作分子即可,但是精度问题无法解决……

    问题转化为如何保证精度……

    于是我们可以当阶乘大于一个比较大的数时在除掉$X$即可。

    事实证明,开$float$也能过(又短又快)。

    当然也有其它乱搞方法,比如如果$Xgeqslant Y imes 0.4$输出$Yes$,否则为$No$。

    时间复杂度:$Theta(T imes Y)$。

    期望得分:$0$分。

    实际得分:$100$分。


    代码时刻

    #include<bits/stdc++.h>
    using namespace std;
    int X,Y;
    int main()
    {
    	int T;scanf("%d",&T);
    	while(T--)
    	{
    		scanf("%d%d",&X,&Y);
    		if(X==1){puts("Yes");continue;}
    		float nowy=1;
    		int sum=0;
    		for(int i=1;i<=Y;i++)
    		{
    			nowy*=i;
    			while(nowy>1000000000.0)
    			{
    				nowy/=X;
    				sum++;
    			}
    		}
    		while(nowy>X){sum++;nowy/=X;}
    		if(sum>=Y)puts("Yes");
    		else puts("No");
    	}
    	return 0;
    }
    

    rp++

  • 相关阅读:
    初步掌握HBase
    基于HBase0.98.13搭建HBase HA分布式集群
    获取当前目录中的文件个数
    MapReduce链接作业
    MapReduce二次排序
    使用map端连接结合分布式缓存机制实现Join算法
    字符串匹配算法-BM
    统计电视机顶盒中无效用户数据,并以压缩格式输出有效用户数据
    字符串匹配算法-KMP
    MapReduce中的Join算法
  • 原文地址:https://www.cnblogs.com/wzc521/p/11767188.html
Copyright © 2020-2023  润新知