[CSP-S模擬測試]:涼宮春日的憂郁(亂搞)


題目傳送門(內部題101)


輸入格式

  第一行輸入一個整數$T$,表示數據組數。
  接下來$T$行,每行兩個數$X,Y$,表示$T$組數據。


輸出格式

  輸出共有$T$行,對於每一組數據,如果$X^Y\leqslant 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\%$的數據,滿足$X\leqslant 8,Y\leqslant 10$。
  對於$80\%$的數據,滿足$X,Y\leqslant 300$。
  對於$100\%$的數據,滿足$X,Y\leqslant 10^5,T\leqslant 5$。


題解

好吧,我承認我真的很會(bu)亂(yao)搞(lian)

比較兩個數大小的其中一種方法就是做比,如果比值大於$1$,則作為分子的數大。

於是我們可以暴力做比。

直接暴力大家都會,用階乘作分子即可,但是精度問題無法解決……

問題轉化為如何保證精度……

於是我們可以當階乘大於一個比較大的數時在除掉$X$即可。

事實證明,開$float$也能過(又短又快)。

當然也有其它亂搞方法,比如如果$X\geqslant Y\times 0.4$輸出$Yes$,否則為$No$。

時間復雜度:$\Theta(T\times 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++


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM