zoukankan      html  css  js  c++  java
  • [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++

  • 相关阅读:
    python用于web题里写解密脚本
    改变checkbox和radio的默认样式
    div内元素垂直居中
    icheck.js插件
    glyphicons字形图标
    没有内容的span元素下掉问题
    临界区保护
    信号量的使用&生产者消费者问题
    空闲线程和钩子函数
    线程的时间片轮询调度
  • 原文地址:https://www.cnblogs.com/wzc521/p/11767188.html
Copyright © 2011-2022 走看看