牛客OI賽制測試賽2
阿新 • • 發佈:2018-09-08
port 例如 其中 efi i+1 png color pop 長度
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
求出無序二元組(a,b) 使得(a|A,b|B)的組數
無序意思就是(a,b)和(b,a) 算一組.
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
A[i][j]=1表示i號點和j號點之間有長度為1的邊直接相連.
求出從 1 號點 到 n 號點長度為k的路徑的數目.
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld
我們認為一個括號匹配,即對任意一個‘)‘,在其左側都有一個‘(‘與它匹配,且他們形成一一映射關系。
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld
鏈接:https://www.nowcoder.com/acm/contest/185/A
來源:牛客網
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
給出一個二元組(A,B)求出無序二元組(a,b) 使得(a|A,b|B)的組數
無序意思就是(a,b)和(b,a) 算一組.
輸入描述:
第一行數據組數 T(1≤T≤10000)
接下來T行,每行兩個正整數 A,B(1≤A,B≤10000)
輸出描述:
共T行,每行一個結果示例1
輸入
復制1 4 6
輸出
復制11
說明
樣例解釋:
二元組如下:
(1,1)(1,2)(1,3)(1,6)
(2,1)(2,2)(2,3)(2,6)
(4,1)(4,2)(4,3)(4,6)
共12組.
無序二元組如下:
(1,1)(1,2)(1,3)(1,6)
(2,2)(2,3)(2,6)
(4,1)(4,2)(4,3)(4,6)
共11組
直接篩素數
1 #include <bits/stdc++.h> 2 3using namespace std; 4 5 int a[10005]; 6 7 void init(){ 8 for (int i = 1; i <= 10000; ++i){ 9 for (int j = i; j <= 10000; j += i){ 10 a[j]++; 11 } 12 } 13 } 14 15 int main(){ 16 int t; 17 init(); 18 cin>>t; 19 int x,y; 20 while(t--){ 21 cin>>x>>y; 22 int one = a[x]; 23 int two = a[y]; 24 int ans = __gcd(x,y); 25 ans = a[ans]; 26 cout<<one*two-((ans-1)*ans)/2<<endl; 27 } 28 return 0; 29 }
鏈接:https://www.nowcoder.com/acm/contest/185/B
來源:牛客網
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
給出一個 n * n 的鄰接矩陣A. A是一個01矩陣 .A[i][j]=1表示i號點和j號點之間有長度為1的邊直接相連.
求出從 1 號點 到 n 號點長度為k的路徑的數目.
輸入描述:
第1行兩個數n,k (20 ≤n ≤ 30,1 ≤ k ≤ 10)
第2行至第n+1行,為一個鄰接矩陣
輸出描述:
題目中所求的數目示例1
輸入
復制4 2 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
輸出
復制2
說明
樣例如圖: 第一條路徑:1-2-4 第二條路徑:1-3-4 矩陣乘法可以解決此問題。1 #include <bits/stdc++.h> 2 #define pb push_back 3 #define test(a) cout<<a<<endl 4 #define ll long long int 5 using namespace std; 6 7 ll n,k,x; 8 ll cnt = 0; 9 ll v[32][32],b[32][32]; 10 ll vis[32][32]; 11 12 13 int main(){ 14 cin>>n>>k; 15 for (int i = 1; i <= n; ++i){ 16 for (int j = 1; j <= n; ++j){ 17 cin>>v[i][j]; 18 vis[i][j] = v[i][j]; 19 } 20 } 21 k--; 22 while(k--){ 23 memset(b,0,sizeof(b)); 24 for(int i = 1; i <= n; ++i){ 25 for(int j = 1; j <= n; ++j){ 26 for(int p = 1; p <= n; ++p){ 27 b[i][j] += v[i][p]*vis[p][j]; 28 } 29 } 30 } 31 for (int i = 1; i <= n; ++i){ 32 for (int j = 1; j <= n; ++j){ 33 v[i][j] = b[i][j]; 34 } 35 } 36 } 37 cout<<v[1][n]<<endl; 38 return 0; 39 }
鏈接:https://www.nowcoder.com/acm/contest/185/C
來源:牛客網
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
給出一個數列 A,求出一個數列B. 其中Bi 表示 數列A中 Ai 右邊第一個比 Ai 大的數的下標(從1開始計數),沒有找到這一個下標 Bi 就為0 輸出數列B輸入描述:
第一行1個數字 n (n ≤ 10000) 第二行n個數字第 i 個數字為 Ai (0 ≤ Ai ≤ 1000000000)輸出描述:
一共一行,第 i 個數和第 i+1 個數中間用空格隔開.示例1
輸入
復制6 3 2 6 1 1 2
輸出
復制3 3 0 6 6 0
說明
樣例不用解釋
這題就用棧來模擬一下了。
1 #include <bits/stdc++.h> 2 #define test(a) cout<<a<<endl 3 using namespace std; 4 struct Node{ 5 int to,val; 6 }; 7 stack<Node> sk; 8 int an[10005]; 9 int n,x; 10 int main(){ 11 cin>>n; 12 for (int i = 1; i <= n; ++i){ 13 cin>>x; 14 if(sk.empty()){ 15 sk.push(Node{i,x}); 16 }else{ 17 if(sk.top().val >= x){ 18 sk.push(Node{i,x}); 19 }else{ 20 while(!sk.empty() && sk.top().val < x){ 21 an[sk.top().to] = i; 22 sk.pop(); 23 } 24 sk.push(Node{i,x}); 25 } 26 } 27 } 28 for(int i = 1; i <= n; ++i){ 29 cout<<an[i]<<" "; 30 } 31 cout<<endl; 32 return 0; 33 }
鏈接:https://www.nowcoder.com/acm/contest/185/D
來源:牛客網
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
Johnson和Nancy要在星光下吃晚餐。這是一件很浪漫的事情
為了增加星光晚餐那浪漫的氛圍,他拿出了一個神奇的魔法棒,並且可以按照一定的規則,改變天上星星的亮暗。
Johnson想考考Nancy,在他揮動魔法棒後,會有多少顆星星依舊閃耀在天空。他知道,Nancy一定會一口說出答案。
Nancy當然知道怎麽做啦,但她想考考你!
Johnson先將天上n個星星排成一排,起初它們都是暗的。
他告訴他的妹子,他將揮動n次魔法棒,第i次揮動會將編號為i的正整數倍的星星的亮暗反轉,即亮的星星轉暗,暗的星星轉亮。
Johnson想問Nancy,最終會有多少個星星依舊閃亮在天空。
輸入描述:
一個整數n,含義請見題目描述。
輸出描述:
一個整數ans,即n次操作後會有多少個星星依舊閃亮。示例1
輸入
復制3
輸出
復制1示例2
輸入
復制7
輸出
復制2
備註:
對於60%的數據:n≤2×106
18 簽到題
對於100%的數據:n≤10
1 #include <bits/stdc++.h> 2 #define test(a) cout<<a<<endl 3 #define ll long long int 4 using namespace std; 5 ll n,x; 6 int main(){ 7 cin>>n; 8 int ans = (int)sqrt(n); 9 cout<<ans<<endl; 10 return 0; 11 }
鏈接:https://www.nowcoder.com/acm/contest/185/E
來源:牛客網
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld
題目描述
給定括號長度N,給出一串括號(只包含小括號),計算出最少的交換(兩兩交換)次數,使整個括號序列匹配。我們認為一個括號匹配,即對任意一個‘)‘,在其左側都有一個‘(‘與它匹配,且他們形成一一映射關系。
輸入描述:
第一行:整數N,表示括號序列長度
第二行:一個字符串,表示括號
輸出描述:
一個整數,表示最少的交換次數示例1
輸入
復制6 (()))(
輸出
復制1示例2
輸入
復制6 )))(((
輸出
復制2
備註:
對於80%的數據:n≤30006 類似簽到題,走一遍字符串就行。
對於100%的數據,n≤5×10
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 string s; 5 int n; 6 int main(){ 7 ios::sync_with_stdio(0); 8 cin.tie(0),cout.tie(0); 9 cin>>n; 10 cin>>s; 11 int l = 0; 12 int ans = 0; 13 for(int i = 0; i < s.length(); i++){ 14 if(s[i]==‘(‘) 15 l++; 16 else{ 17 if(l==0) 18 ans++; 19 else 20 l--; 21 } 22 } 23 int cnt = ans%2==0?ans/2:ans/2+1; 24 cout<<cnt<<endl; 25 return 0; 26 }
鏈接:https://www.nowcoder.com/acm/contest/185/F
來源:牛客網
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld
題目描述
輸入一個整數X,求一個整數N,使得N!恰好大於XX。輸入描述:
第一行:一個整數X
輸出描述:
第一行:一個整數N示例1
輸入
復制7
輸出
復制10
備註:
每個測試點所對應的X滿足:
第i個測試點輸入的值為第i-1個測試點輸入的值乘以10再加上7。
特別的,第一個測試點所輸入的值為7。
提示:數據共有10組。
這題其實可以打表做。但是那樣就是失去了做題的本意了。
所以最好的方法就是斯特林公式加二分查找。
兩邊加個log10。
1 #include <bits/stdc++.h> 2 3 #define ll long long int 4 #define pi acos(-1) 5 #define eps 1e-10 6 #define e 2.718281828459 7 using namespace std; 8 9 int main(){ 10 ll t; 11 cin>>t; 12 double ans = t*log10(t); 13 ll l = 1,r = 1e15; 14 while(r - l > 1){ 15 ll mid = (l + r)>>1; 16 double cnt = log10(sqrt(2.0 * mid * pi)) + mid * log10(mid / e); 17 if(cnt - ans > eps){ 18 r = mid; 19 }else{ 20 l = mid; 21 } 22 } 23 cout<<r<<endl; 24 return 0; 25 }
牛客OI賽制測試賽2