2018年全國多校算法寒假訓練營練習比賽(第三場)

A——連接:https://www.nowcoder.net/acm/contest/75/A
來源:牛客網

c++

夫夫有一天對一個數有多少位數感興趣,可是他又不想跟凡夫俗子同樣,
因此他想知道給一個整數n,求n!的在8進制下的位數是多少位。

輸入描述:

第一行是一個整數t(0<t<=1000000)(表示t組數據)
接下來t行,每一行有一個整數n(0<=n<=10000000)

輸出描述:

輸出n!在8進制下的位數。

示例1

輸入

3
4
2
5

輸出

2
1
3
#include<bits/stdc++.h>
using namespace std; #define ull unsigned long long
const double Pi = asin(1.0)*2; typedef long long ll; const double e = 2.718281828459; const int inf = 0x3f3f3f3f; const int moder = 1e9 + 7; const int MAXN=1000000; int main() { int t; scanf("%d", &t); double temp = log(8); while(t--) { int n; scanf("%d",&n); if(n == 0 || n == 1) cout << 1 << endl; else { double ans = ((log(2*n*Pi)/2)+n*(log(n/e)))/temp + 1; printf("%d\n", (int)ans); } } return 0; }

媽的,用cin超時了,花了我一個小時。測試

B——連接:https://www.nowcoder.net/acm/contest/75/B
來源:牛客網

spa

時間限制:C/C++ 1秒,其餘語言2秒
空間限制:C/C++ 32768K,其餘語言65536K
64bit IO Format: %lld

題目描述

uu遇到了一個小問題,但是他不想答。你能替他解決這個問題嗎?
問題:給你k對a和r是否存在一個正整數x使每隊a和r都知足:x mod a=r,求最小正解x或無解。

輸入描述:

第一行是正整數k(k<=100000)
接下來k行,每行有倆個正整數a,r(100000>a>r>=0)

輸出描述:

在每一個測試用例輸出非負整數m,佔一行。
若是有多個可能的值,輸出最小的值。
若是沒有可能的值,則輸出-1。
示例1

輸入

2
8 7
11 9

輸出

31
#include<bits/stdc++.h>
using namespace std; #define ull unsigned long long typedef long long ll; const int inf = 0x3f3f3f3f; const int moder = 1e9 + 7; const int MAXN=100005; ll extgcd(ll a,ll b,ll &x,ll &y) { ll d = a; if(b == 0) { x = 1; y = 0; } else { d = extgcd(b,a%b,y,x); y -= (a/b)*x; } return d; } ll solve(ll a[],ll r[],ll n) { ll d,c,i,x,y,t; for(i=1;i<n;i++) { c=r[i]-r[i-1]; d=extgcd(a[i-1],a[i],x,y); if(c%d!=0) return -1; t=a[i]/d; x=(x*(c/d)%t+t)%t; r[i]=a[i-1]*x+r[i-1]; a[i]=a[i-1]*(a[i]/d); } return r[n-1]; } int main() { ll n; ll a[MAXN]; ll r[MAXN]; cin >> n; for(int i=0;i < n;i++) { cin >> a[i] >> r[i]; } ll ans = solve(a,r,n); cout << ans << endl; return 0; }

線性同餘方程組裸題.net

D——連接:https://www.nowcoder.net/acm/contest/75/D
來源:牛客網

code

時間限制:C/C++ 1秒,其餘語言2秒
空間限制:C/C++ 32768K,其餘語言65536K
64bit IO Format: %lld

題目描述

小牛和小客玩石子游戲,他們用n個石子圍成一圈,小牛和小客分別從其中取石子,誰先取完誰勝,每次能夠從一圈中取一個或者相鄰兩個,每次都是小牛先取,請輸出勝利者的名字(小牛獲勝輸出XiaoNiu,小客獲勝輸出XiaoKe)(1 2 3 4 取走 2 13 不算相鄰)


輸入描述:

輸入包括多組測試數據
每組測試數據一個n(1≤n≤1e9)

輸出描述:

每組用一行輸出勝利者的名字(小牛獲勝輸出XiaoNiu,小客獲勝輸出XiaoKe)
示例1

輸入

2
3

輸出

XiaoNiu
XiaoKe
#include<bits/stdc++.h>
using namespace std; #define ull unsigned long long typedef long long ll; const int inf = 0x3f3f3f3f; const int moder = 1e9 + 7; const int MAXN=1000010; int main() { ll n; while(cin >> n) { if(n > 2) cout << "XiaoKe" << endl; else { cout << "XiaoNiu" << endl; } } return 0; }

博弈orm

相關文章
相關標籤/搜索