A——链接:https://www.nowcoder.net/acm/contest/75/A
来源:牛客网
夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样,
所以他想知道给一个整数n,求n!的在8进制下的位数是多少位。
所以他想知道给一个整数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
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
uu遇到了一个小问题,可是他不想答。你能替他解决这个问题吗?
问题:给你k对a和r是否存在一个正整数x使每队a和r都满足:x mod a=r,求最小正解x或无解。
问题:给你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; }
线性同余方程组裸题
D——链接:https://www.nowcoder.net/acm/contest/75/D
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制: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; }
博弈