
虽然普及组通常都是暴力省一,但是有一些题目还是挺难的qwq个人认为能进TG的题目会在后面打上'*'


1 #include<bits/stdc++.h>
2 using namespace std;
3 int main(){
4 std::ios::sync_with_stdio(false);
5 double Sn = 0;
6 int k , i = 1;
7 cin >> k;
8 while(Sn <= k) Sn += 1.0 / i++;
9 cout << --i;
10 return 0;
11 }
级数求和


1 //递推
2 #include<bits/stdc++.h>
3 using namespace std;
4 long long num[21][21];
5 int dir[8][2] = {1,2,1,-2,-1,2,-1,-2,2,1,2,-1,-2,-1,-2,1};
6 int main()
7 {
8 ios::sync_with_stdio(false);
9 int a , b , c , d;
10 cin >> a >> b >> c >> d;
11 for(int i = 0 ; i <= a ; i++)
12 for(int j = 0 ; j <= b ; j++)
13 {
14 int f = 1;
15 for(int k = 0 ; k < 8 && f ; k++)
16 if(c + dir[k][0] == i && d + dir[k][1] == j) f = 0;
17 if(f && (c != i || d != j))
18 if(i + j) num[i][j] = num[i ? i - 1 : 0][j] + num[i][j ? j - 1 : 0];
19 else num[i][j] = 1;
20 }
21 cout << num[a][b];
22 return 0;
23 }
过河卒


1 //递归
2 #include<bits/stdc++.h>
3 using namespace std;
4 int num[21] , cou , n;
5 bool vis[21];
6 bool ifZ(int a)
7 {
8 if(a == 1 || !a) return false;
9 for(int i = 2 ; i * i <= a ; i++)
10 if(a % i == 0) return false;
11 return true;
12 }
13 void dfs(int a , int b , int c)
14 {
15 if(!a)
16 {
17 if(ifZ(b)) cou++;
18 return;
19 }
20 for(int i = c ; i <= n - a ; i++)
21 if(!vis[i])
22 {
23 vis[i] = 1;
24 dfs(a - 1 , b + num[i] , i + 1);
25 vis[i] = 0;
26 }
27 }
28 int main()
29 {
30 std::ios::sync_with_stdio(false);
31 int k;
32 cin >> n >> k;
33 for(int i = 0 ; i < n ; i++) cin >> num[i];
34 dfs(k , 0 , 0);
35 cout << cou;
36 return 0;
37 }
选数


1 //按位搜索
2 #include<bits/stdc++.h>
3 using namespace std;
4 multimap < char , char > rule;
5 bool times[31][10];
6 int num[31] = {1 , 1};
7 int dfs(char a , int b)
8 {
9 if(times[b][a - '0']) return 0;
10 times[b][a - '0'] = 1;
11 int sum = 1;
12 map < char , char > :: iterator iter = rule.find(a);
13 for(int i = 0 ; i != rule.count(a) ; ++i , ++iter)
14 sum += dfs(iter -> second , b);
15 return sum;
16 }
17 int main()
18 {
19 string s;
20 int n;
21 for(cin >> s >> n ; n ; n--){
22 char a , b;
23 cin >> a >> b;
24 rule.insert(make_pair(a , b));
25 }
26 for(int i = 0 ; i < s.size() ; i++)
27 {
28 int k = dfs(s[i] , i);
29 for(int i = 1 ; i <= num[0] ; i++) num[i] *= k;
30 for(int i = 1 ; i <= num[0] ; i++)
31 if(num[i] >= 10)
32 {
33 num[i + 1] += num[i] / 10;
34 num[i] %= 10;
35 if(i == num[0]) num[0]++;
36 }
37 }
38 while(num[0]--) cout << num[num[0] + 1];
39 return 0;
40 }
产生数


1 //卡特兰数
2 #include<bits/stdc++.h>
3 #define ll long long
4 using namespace std;
5 inline ll fast_read()
6 {
7 char c = getchar();
8 ll a = 0;
9 int k = 0;
10 while(!isdigit(c))
11 {
12 if(c == '-') k = 1;
13 c = getchar();
14 }
15 while(isdigit(c)) a = (a << 3) + (a << 1) + c - '0' , c = getchar();
16 return k ? -a : a;
17 }
18 inline void fast_print(ll x)
19 {
20 int num[1001] , dirN = -1;
21 if(x < 0) putchar('-') , x = -x;
22 while(x) num[++dirN] = x % 10 , x /= 10;
23 if(dirN == -1) putchar('0');
24 while(dirN + 1) putchar(num[dirN--] + 48);
25 putchar('\n');
26 }
27 int num[19] = {1 , 1};
28 int main()
29 {
30 int n = fast_read();
31 for(int i = 2 ; i <= n ; i++)
32 for(int j = 0 ; j < n ; j++)
33 num[i] += num[j] * num[i - j - 1];
34 cout << num[n];
35 return 0;
36 }
栈


1 //注意最后的0:0
2 #include<bits/stdc++.h>
3 using namespace std;
4 int ans[2500][2];
5 int main()
6 {
7 string s;
8 int W11 = 0 , L11 = 0 , W21 = 0 , L21 = 0 , dirA = 0;
9 while(cin >> s)
10 {
11 int ifE = 0;
12 for(int i = 0 ; i < s.size() && !ifE ; i++)
13 {
14 if(s[i] == 'W')
15 {
16 W11++;
17 W21++;
18 if(W11 >= 11 && W11 - L11 >= 2)
19 {
20 cout << W11 << ":" << L11 << endl;
21 W11 = L11 = 0;
22 }
23 if(W21 >= 21 && W21 - L21 >= 2)
24 {
25 ans[dirA][0] = W21;
26 ans[dirA++][1] = L21;
27 W21 = L21 = 0;
28 }
29 }
30 else if(s[i] == 'L')
31 {
32 L11++;
33 L21++;
34 if(L11 >= 11 && L11 - W11 >= 2)
35 {
36 cout << W11 << ":" << L11 << endl;
37 W11 = L11 = 0;
38 }
39 if(L21 >= 21 && L21 - W21 >= 2)
40 {
41 ans[dirA][0] = W21;
42 ans[dirA++][1] = L21;
43 W21 = L21 = 0;
44 }
45 }
46 else ifE = 1;
47 }
48 if(ifE) break;
49 }
50 cout << W11 << ":" << L11 << endl;
51 for(int i = 0 ; i < dirA ; i++) cout << endl << ans[i][0] << ":" << ans[i][1];
52 cout << endl << W21 << ":" << L21;
53 return 0;
54 }
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-124192-1.html
周边国家会重新选边站
反分裂法已经为台独分子定好下场了