提交 25e421c2 编写于 作者: 每日一练社区's avatar 每日一练社区

add 25 exercises

上级 80e70db5
...@@ -4,24 +4,7 @@ ...@@ -4,24 +4,7 @@
一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
请你推算一下,他当时到底有多年轻。 请你推算一下,他当时到底有多年轻。
以下代码的输出中包含了该数学家的真实年龄,请你从下面四个选项中选择正确答案。 请你从下面四个选项中选择正确答案。
```cpp
#include <iostream>
using namespace std;
int main()
{
for (int i = 11; i < 35; i++)
{
int i1 = i * i * i;
int i2 = i * i1;
if ((i1 >= 1000 && i1 < 10000) && (i2 >= 100000 && i2 < 1000000))
cout << i << " " << i1 << " " << i2 << endl;
}
return 0;
}
```
## aop ## aop
......
...@@ -75,7 +75,6 @@ using namespace std; ...@@ -75,7 +75,6 @@ using namespace std;
```cpp ```cpp
#define ll long long #define ll long long
#define inf 0x7fffffff #define inf 0x7fffffff
using namespace std;
const int N = 1e5 + 10; const int N = 1e5 + 10;
const int mod = 1e9 + 9; const int mod = 1e9 + 9;
int n, k; int n, k;
......
...@@ -57,19 +57,15 @@ ...@@ -57,19 +57,15 @@
105 120 105 120
``` ```
以下选项错误的是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std; using namespace std;
int ans[10005];
char str[100001];
``` ```
### after ### after
...@@ -80,37 +76,31 @@ char str[100001]; ...@@ -80,37 +76,31 @@ char str[100001];
## 答案 ## 答案
```cpp ```cpp
int a[100000];
int main() int main()
{ {
int n; int i, n, count = 0, k;
char ch;
cin >> n; cin >> n;
int i, k = 0;
getchar(); getchar();
for (i = 0; i < n; i++)
for (;;)
{ {
gets(str); cin >> k;
char *p; a[k]++;
p = strtok(str, " "); ch = getchar();
ans[k++] = atoi(p); if (ch == '\n')
while (p) count++;
{ if (count == n)
p = strtok(NULL, " "); break;
if (p)
ans[k++] = atoi(p);
}
} }
sort(ans, ans + k); for (i = 1; i < 10000; i++)
int ans1, ans2;
for (i = 0; i < k - 1; i++)
{ {
if (ans[i + 1] - ans[i] == 2) if (a[i - 1] != 0 && a[i + 1] != 0 && a[i] == 0)
{ cout << i << " ";
ans1 = ans[i] + 1; if (a[i] == 2)
} cout << i + 1 << " " << endl;
if (ans[i + 1] == ans[i])
ans2 = ans[i];
} }
cout << ans1 << " " << ans2;
} }
``` ```
## 选项 ## 选项
...@@ -119,80 +109,97 @@ int main() ...@@ -119,80 +109,97 @@ int main()
### A ### A
```cpp ```cpp
int convert(string s)
{
stringstream str;
int ex;
str << s;
str >> ex;
return ex;
}
int main() int main()
{ {
int n; int line;
cin >> n; cin >> line;
int i, k = 0; vector<int> a;
getchar(); getchar();
for (i = 0; i < n; i++)
for (int i = 0; i < line; i++)
{ {
gets(str); string s;
char *p; getline(cin, s);
p = strtok(str, " "); stringstream str(s);
ans[k++] = atoi(p); string s2;
while (p)
while (getline(str, s2, ' '))
{ {
p = strtok(NULL, " "); int ex;
if (p) ex = convert(s2);
ans[k] = atoi(p); a.push_back(ex);
} }
} }
sort(ans, ans + k);
int ans1, ans2; int result1, result2;
for (i = 0; i < k - 1; i++) sort(a.begin(), a.end());
for (int i = 1; i < a.size(); i++)
{ {
if (ans[i + 1] - ans[i] == 2) if (a[i] - a[i - 1] == 2)
{ result1 = a[i] - 1;
ans1 = ans[i] + 1; if (a[i] == a[i - 1])
} result2 = a[i];
if (ans[i + 1] == ans[i])
ans2 = ans[i];
} }
cout << ans1 << " " << ans2; cout << result1 << " " << result2;
} }
``` ```
### B ### B
```cpp ```cpp
int a[10005];
int main() int main()
{ {
int n; int n;
cin >> n; cin >> n;
int i, k = 0; int k = 0;
getchar(); char ch = ' ';
int i, j = 0, t;
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
gets(str); while (ch != '\n')
char *p;
p = strtok(str, " ");
ans[k++] = atoi(p);
while (p)
{ {
p = strtok(NULL, " "); cin >> t;
if (p) ch = getchar();
ans[k++] = atoi(p);
a[j++] = t;
k++;
} }
ch = ' ';
} }
sort(ans, ans + k); sort(a, a + k);
int ans1, ans2; int ans1 = 0, ans2 = 0;
for (i = 0; i < k - 1; i++) for (j = 0; j < k - 1; j++)
{ {
if (ans[i + 1] - ans[i] == 2) if (ans1 && ans2)
{ break;
ans1 = ans[i + 1]; if (a[j] == a[j + 1] - 1)
} continue;
if (ans[i + 1] == ans[i]) else if (a[j] == a[j + 1])
ans2 = ans[i]; ans2 = a[j];
else
ans1 = a[j] + 1;
} }
cout << ans1 << " " << ans2; cout << ans1 << " " << ans2;
return 0;
} }
``` ```
### C ### C
```cpp ```cpp
int ans[10005];
char str[100001];
int main() int main()
{ {
int n; int n;
...@@ -216,7 +223,7 @@ int main() ...@@ -216,7 +223,7 @@ int main()
int ans1, ans2; int ans1, ans2;
for (i = 0; i < k - 1; i++) for (i = 0; i < k - 1; i++)
{ {
if (ans[i + 1] - ans[i] == 1) if (ans[i + 1] - ans[i] == 2)
{ {
ans1 = ans[i] + 1; ans1 = ans[i] + 1;
} }
......
...@@ -4,13 +4,14 @@ ...@@ -4,13 +4,14 @@
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。 接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。 得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
以下程序哪项运行后不能得到正确答案?
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
#include <vector>
using namespace std; using namespace std;
``` ```
### after ### after
...@@ -22,23 +23,31 @@ using namespace std; ...@@ -22,23 +23,31 @@ using namespace std;
## 答案 ## 答案
```cpp ```cpp
int a[2014];
int main() int main()
{ {
vector<char> vc1; int count = 2014;
int i; for (int i = 0; i < 2014; i++)
for (i = 0; i < 2014; i++) {
vc1.push_back('a' + (i % 19)); a[i] = i + 1;
while (vc1.size() != 1) }
{ do
vector<char> vc2; {
cout << vc1.size() << endl; for (int i = 0; i <= count - 1; i += 2)
for (i = 1; i < vc1.size(); i += 2) a[i] = 0;
vc2.push_back(vc1[i]); count = 0;
vc1.assign(vc2.begin(), vc2.end()); for (int j = 0; j <= 2013; j++)
cout << vc1.size() << endl; {
} if (a[j] != 0)
cout << vc1[0] << endl; {
return 0; a[count] = a[j];
a[j] = 0;
count++;
}
}
} while (count != 1);
cout << char('a' + (a[0] % 19));
return 0;
} }
``` ```
## 选项 ## 选项
...@@ -49,21 +58,23 @@ int main() ...@@ -49,21 +58,23 @@ int main()
```cpp ```cpp
int main() int main()
{ {
vector<char> vc1; string s = "abcdefghijklmnopqrs";
int i; string str;
for (i = 0; i < 2014; i++)
vc1.push_back('a' + (i % 19)); for (int i = 0; i < 106; i++)
while (vc1.size() != 1) {
{ str += s;
vector<char> vc2; }
cout << vc1.size() << endl;
for (i = 0; i < vc1.size(); i++) while (str.length() > 1)
vc2.push_back(vc1[i]); {
vc1.assign(vc2.begin(), vc2.end()); for (int i = 0; i < str.length(); i++)
cout << vc1.size() << endl; {
} str.erase(i, 1);
cout << vc1[0] << endl; }
return 0; }
cout << str;
return 0;
} }
``` ```
...@@ -72,21 +83,23 @@ int main() ...@@ -72,21 +83,23 @@ int main()
```cpp ```cpp
int main() int main()
{ {
vector<char> vc1; char a[2015];
int i; int t = 0;
for (i = 0; i < 2014; i++) for (int j = 0; j < 106; j++)
vc1.push_back('a' + (i % 19)); for (int i = 0; i < 19; i++)
while (vc1.size() != 1) a[t++] = 'a' + i;
{ a[t] = 0;
vector<char> vc2; int k;
cout << vc1.size() << endl; while (t != 1)
for (i = 0; i < vc1.size(); i += 1) {
vc2.push_back(vc1[i]); k = 0;
vc1.assign(vc2.begin(), vc2.end()); for (int j = 1; j < t; j += 2)
cout << vc1.size() << endl; a[k++] = a[j];
} a[k] = '\0';
cout << vc1[0] << endl; t = k;
return 0; }
cout << a << endl;
return 0;
} }
``` ```
...@@ -95,20 +108,19 @@ int main() ...@@ -95,20 +108,19 @@ int main()
```cpp ```cpp
int main() int main()
{ {
vector<char> vc1; vector<char> vc1;
int i; int i;
for (i = 0; i < 2014; i++) for (i = 0; i < 2014; i++)
vc1.push_back('a' + (i % 19)); vc1.push_back('a' + (i % 19));
while (vc1.size() != 1) while (vc1.size() != 1)
{ {
vector<char> vc2; vector<char> vc2;
cout << vc1.size() << endl;
for (i = 0; i < vc1.size(); i += 2) for (i = 1; i < vc1.size(); i += 2)
vc2.push_back(vc1[i]); vc2.push_back(vc1[i]);
vc1.assign(vc2.begin(), vc2.end()); vc1.assign(vc2.begin(), vc2.end());
cout << vc1.size() << endl; }
} cout << vc1[0] << endl;
cout << vc1[0] << endl; return 0;
return 0;
} }
``` ```
...@@ -24,13 +24,47 @@ yx2 ...@@ -24,13 +24,47 @@ yx2
yx1 yx1
``` ```
请从以下四个选项中选择空白处的内容。
```cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
struct student
{
string xm;
int xh;
double yy;
double sx;
double cpp;
};
student a[1000];
int n;
double sum = 0, min = 301, max = 0;
string mins, maxs;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i].xm >> a[i].xh >> a[i].yy >> a[i].sx >> a[i].cpp;
sum = a[i].yy + a[i].sx + a[i].cpp;
__________________
}
cout << maxs << endl
<< mins;
return 0;
}
```
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream>
using namespace std;
``` ```
### after ### after
...@@ -41,41 +75,16 @@ using namespace std; ...@@ -41,41 +75,16 @@ using namespace std;
## 答案 ## 答案
```cpp ```cpp
int main() if (min > sum)
{ {
struct student min = sum;
{ mins = a[i].xm;
string xm; }
int xh; if (max < sum)
double yy; {
double sx; max = sum;
double cpp; maxs = a[i].xm;
}; }
student a[1000];
int n;
double sum = 0, min = 301, max = 0;
string mins, maxs;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i].xm >> a[i].xh >> a[i].yy >> a[i].sx >> a[i].cpp;
sum = a[i].yy + a[i].sx + a[i].cpp;
if (min > sum)
{
min = sum;
mins = a[i].xm;
}
if (max < sum)
{
max = sum;
maxs = a[i].xm;
}
}
cout << maxs << endl
<< mins;
return 0;
}
``` ```
## 选项 ## 选项
...@@ -83,116 +92,44 @@ int main() ...@@ -83,116 +92,44 @@ int main()
### A ### A
```cpp ```cpp
int main() if (min < sum)
{ {
struct student min = sum;
{ mins = a[i].xm;
string xm; }
int xh; if (max > sum)
double yy; {
double sx; max = sum;
double cpp; maxs = a[i].xm;
}; }
student a[1000];
int n;
double sum = 0, min = 301, max = 0;
string mins, maxs;
cin >> n;
for (int i = 1; i < n; i++)
{
cin >> a[i].xm >> a[i].xh >> a[i].yy >> a[i].sx >> a[i].cpp;
sum = a[i].yy + a[i].sx + a[i].cpp;
if (min > sum)
{
min = sum;
mins = a[i].xm;
}
if (max < sum)
{
max = sum;
maxs = a[i].xm;
}
}
cout << maxs << endl
<< mins;
return 0;
}
``` ```
### B ### B
```cpp ```cpp
int main() if (min > sum)
{ {
struct student max = sum;
{ mins = a[i].xm;
string xm; }
int xh; if (max < sum)
double yy; {
double sx; min = sum;
double cpp; maxs = a[i].xm;
}; }
student a[1000];
int n;
double sum = 0, min = 301, max = 0;
string mins, maxs;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i].xm >> a[i].xh >> a[i].yy >> a[i].sx >> a[i].cpp;
sum = a[i].yy + a[i].sx + a[i].cpp;
if (min > sum)
{
min = sum;
mins = a[i]->xm;
}
if (max < sum)
{
max = sum;
maxs = a[i]->xm;
}
cout << maxs << endl
<< mins;
return 0;
}
}
``` ```
### C ### C
```cpp ```cpp
int main() if (min > sum)
{ {
struct student min = sum;
{ maxs = a[i].xm;
string xm; }
int xh; if (max < sum)
double yy; {
double sx; max = sum;
double cpp; mins = a[i].xm;
}; }
student a[1000];
int n;
double sum = 0, min = 301, max = 0;
string mins, maxs;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i].xm >> a[i].xh >> a[i].yy >> a[i].sx >> a[i].cpp;
sum = a[i].yy + a[i].sx + a[i].cpp;
if (min > sum)
{
min = sum;
mins = a[i].xm;
}
if (max < sum)
{
max = sum;
maxs = a[i].xm;
}
}
cout << mins << endl
<< maxs;
return 0;
}
``` ```
...@@ -42,13 +42,15 @@ bbccccddaaaacccc ...@@ -42,13 +42,15 @@ bbccccddaaaacccc
6 6
``` ```
以下选项错误的是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <stdio.h> #include <bits/stdc++.h>
#include <string.h> using namespace std;
``` ```
### after ### after
...@@ -59,31 +61,31 @@ bbccccddaaaacccc ...@@ -59,31 +61,31 @@ bbccccddaaaacccc
## 答案 ## 答案
```cpp ```cpp
int main() const int N = 1010;
int cnt[26];
char a[N];
char b[27] = {"abcdefghijklmnopqrstuvwxyz"};
int main()
{ {
char s[1000]; cin >> a;
scanf("%s", &s); for (int i = 0; i < 26; i++)
int len = strlen(s); for (int j = 0; a[j]; j++)
int helper[256] = {0}; if (b[i] == a[j + 1])
int max = 0, min = len; cnt[i]++;
for (int i = 0; i < len; i++)
{ int maxn = 0, minn = 1000;
helper[s[i]]++; for (int i = 0; i <= 26; i++)
} if (cnt[i])
for (int i = 0; i < 256; i++) {
{ maxn = max(maxn, cnt[i]);
if (helper[i] > max) minn = min(minn, cnt[i]);
{ }
max = helper[i];
} cout << maxn - minn << endl;
if (helper[i] < min && helper[i] != 0) return 0;
{
min = helper[i];
}
}
printf("%d\n", max - min);
return 0;
} }
``` ```
## 选项 ## 选项
...@@ -91,89 +93,90 @@ int main() ...@@ -91,89 +93,90 @@ int main()
### A ### A
```cpp ```cpp
int main() int main()
{ {
char s[1000]; char s[1000];
scanf("%s", &s); scanf("%s", &s);
int len = strlen(s); int len = strlen(s);
int helper[256] = {0}; int helper[256] = {0};
int max = 0, min = len; int max = 0, min = len;
for (int i = 0; i < len; i++) for (int i = 0; i < len; i++)
{ {
helper[s[i]]++; helper[s[i]]++;
} }
for (int i = 0; i < 256; i++) for (int i = 0; i < 256; i++)
{ {
if (helper[i] > max) if (helper[i] > max)
{ {
max = helper[i]; max = helper[i];
} }
if (helper[i] < min) if (helper[i] < min && helper[i] != 0)
{ {
min = helper[i]; min = helper[i];
} }
} }
printf("%d\n", max - min); printf("%d\n", max - min);
return 0; return 0;
} }
``` ```
### B ### B
```cpp ```cpp
int main() int cnt[1001];
int main()
{ {
char s[1000]; string s;
scanf("%s", &s); cin >> s;
int len = strlen(s); int max1 = -1, min1 = 1001;
int helper[256] = {0}; for (int i = 0; i < s.length(); i++)
int max = 0, min = len; {
for (int i = 0; i < len; i++) for (int j = 0; j <= s.length(); j++)
{ {
helper[s[i]]++; if (s[i] == s[j])
} {
for (int i = 0; i < 256; i++) cnt[i]++;
{ }
if (helper[i] > max) }
{ }
max = helper[i]; for (int i = 0; i < s.length(); i++)
} {
if (helper[i] < min && helper[i] == 0) if (cnt[i] > max1)
{ {
min = helper[i]; max1 = cnt[i];
} }
} if (cnt[i] < min1)
printf("%d\n", max - min); {
return 0; min1 = cnt[i];
}
}
cout << max1 - min1 << endl;
return 0;
} }
``` ```
### C ### C
```cpp ```cpp
int main() int a[26];
int main()
{ {
char s[1000]; string str;
scanf("%s", &s); cin >> str;
int len = strlen(s); for (int i = 0; i < str.length(); i++)
int helper[256] = {0}; {
int max = 0, min = len; a[str[i] - 'a']++;
for (int i = 0; i < len; i++) }
{ sort(a, a + 26);
helper[s[i]]++; for (int i = 0; i < 26; i++)
} {
for (int i = 0; i < 256; i++) if (a[i] != 0)
{ {
if (helper[i] < max) cout << a[25] - a[i] << endl;
{ break;
max = helper[i]; }
} }
if (helper[i] > min) return 0;
{
min = helper[i];
}
}
printf("%d\n", max - min);
return 0;
} }
``` ```
...@@ -3,52 +3,6 @@ ...@@ -3,52 +3,6 @@
y年m月d日是哪一年的第几天。 y年m月d日是哪一年的第几天。
比如y年的1月1日是那一年的第一天,那么2000年7月7日是那一年的第几天。 比如y年的1月1日是那一年的第一天,那么2000年7月7日是那一年的第几天。
**输入**
```
2000 7 7
```
请通过以下代码,选出正确答案。
```cpp
#include <bits/stdc++.h>
using namespace std;
bool is_leap(int year)
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
int main()
{
int y, m, d, ans = 0;
cin >> y >> m >> d;
int L_m_d[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int nonL_m_d[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (is_leap(y))
{
for (int i = 0; i < (m - 1); i++)
{
ans += L_m_d[i];
}
ans += d;
}
else
{
for (int i = 0; i < (m - 1); i++)
{
ans += nonL_m_d[i];
}
ans += d;
}
cout << ans << endl;
return 0;
}
```
## aop ## aop
### before ### before
......
...@@ -40,13 +40,15 @@ o 6 ...@@ -40,13 +40,15 @@ o 6
对于所有的评测用例,输入的单词长度不超过 1000。 对于所有的评测用例,输入的单词长度不超过 1000。
以下选项错误的是?
## aop ## aop
### before ### before
```cpp ```cpp
#include "stdio.h" #include <bits/stdc++.h>
#include "string.h" using namespace std;
``` ```
### after ### after
...@@ -59,32 +61,27 @@ o 6 ...@@ -59,32 +61,27 @@ o 6
```cpp ```cpp
int main() int main()
{ {
char a[1005];
int a[128] = {0}; scanf("%s", a);
char s[1000]; int len;
scanf("%s", s); len = strlen(a);
int len = strlen(s); int b[26] = {0};
int max = 0;
char t = 0;
for (int i = 0; i < len; i++) for (int i = 0; i < len; i++)
{ {
a[s[i]]++; b[a[i] + 'a']++;
if (max < a[s[i]]) }
{ int max1 = 0, j;
max = a[s[i]]; for (int i = 0; i < 26; i++)
t = s[i]; {
} if (max1 < b[i])
else if (max == a[s[i]])
{ {
if (t > s[i]) max1 = b[i];
{ j = i;
t = s[i];
}
} }
} }
printf("%c\n%d", t, max);
cout << char('a' + j) << endl
<< max1;
} }
``` ```
## 选项 ## 选项
...@@ -93,68 +90,103 @@ int main() ...@@ -93,68 +90,103 @@ int main()
### A ### A
```cpp ```cpp
#define MAX 1010
int s[MAX];
int main() int main()
{ {
string str;
int a[128] = {0}; cin >> str;
char s[1000]; int n = str.size();
scanf("%s", s); for (int i = 0; i < n; i++)
int len = strlen(s); {
int a = str[i] - 'a';
s[a]++;
}
int max = 0; int max = 0;
char t = 0; char ch;
for (int i = 0; i < MAX; i++)
for (int i = 0; i < len; i++)
{ {
a[s[i]]++; if (max <= s[i])
if (max > a[s[i]])
{
max = a[s[i]];
t = s[i];
}
else if (max == a[s[i]])
{ {
if (t > s[i]) if (max < s[i])
{ {
t = s[i]; max = s[i];
ch = (char)(i + 'a');
}
else if (max == s[i])
{
max = s[i];
ch = ch;
} }
} }
} }
printf("%c\n%d", t, max);
cout << ch << endl;
cout << max << endl;
return 0;
} }
``` ```
### B ### B
```cpp ```cpp
char m[1005];
int n[1005];
char c;
bool b[1005];
string str;
int main() int main()
{ {
int a[128] = {0};
char s[1000];
scanf("%s", s);
int len = strlen(s);
int max = 0; int max = 0;
char t = 0; cin >> str;
memset(b, false, sizeof(b));
for (int i = 0; i < len; i++)
for (int i = 0; i < str.size(); i++)
{ {
a[s[i]]++; while (b[i])
if (max > a[s[i]])
{
max = a[s[i]];
t = s[i + 1];
}
else if (max == a[s[i]])
{ {
if (t > s[i]) i++;
}
m[i] = str[i];
b[i] = true;
n[i] = 1;
for (int j = i + 1; j < str.size(); j++)
{
if (m[i] == str[j])
{ {
t = s[i]; n[i]++;
b[j] = true;
} }
} }
} if (max <= n[i])
printf("%c\n%d", t, max); {
if (max == n[i])
{
if ((c - 'a') <= (m[i] - 'a'))
{
c = c;
}
else
{
c = m[i];
}
}
else
{
max = n[i];
c = m[i];
}
}
}
cout << c << endl;
cout << max << endl;
return 0;
} }
``` ```
...@@ -163,23 +195,22 @@ int main() ...@@ -163,23 +195,22 @@ int main()
```cpp ```cpp
int main() int main()
{ {
int a[128] = {0}; int a[128] = {0};
char s[1000]; char s[1000];
scanf("%s", s); scanf("%s", s);
int len = strlen(s); int len = strlen(s);
int max = 0; int max = 0;
char t = 0; char t = 0;
for (int i = 0; i < len; i++) for (int i = 0; i < len; i++)
{ {
a[s[i]]++; a[s[i]]++;
if (max < a[s[i]]) if (max < a[s[i]])
{ {
max = a[s[i]]; max = a[s[i]];
t = s[i + 1]; t = s[i];
} }
else if (max == a[s[i]]) else if (max == a[s[i]])
{ {
if (t > s[i]) if (t > s[i])
...@@ -187,8 +218,7 @@ int main() ...@@ -187,8 +218,7 @@ int main()
t = s[i]; t = s[i];
} }
} }
} }
printf("%c\n%d", t, max); printf("%c\n%d", t, max);
} }
``` ```
...@@ -45,6 +45,8 @@ o****o**** ...@@ -45,6 +45,8 @@ o****o****
1 1
``` ```
以下选项错误的是?
## aop ## aop
### before ### before
...@@ -62,33 +64,23 @@ using namespace std; ...@@ -62,33 +64,23 @@ using namespace std;
## 答案 ## 答案
```cpp ```cpp
char a[1005], b[1005];
int len, i = 0, ans = 0;
int main() int main()
{ {
string a, b; scanf("%s%s", a, b);
cin >> a >> b; len = strlen(a);
int a1 = a.size(), b1 = b.size(), ans = 0; while (i < len)
for (int i = 0; i < a1; i++)
{ {
if (a[i] == b[i]) if (a[i] != b[i])
{
continue;
}
else
{ {
ans++; a[i + 1] = (a[i + 1] == '*' ? '*' : 'o');
a[i] = b[i]; ++ans;
if (a[i + 1] == '*')
{
a[i + 1] = 'o';
}
else
{
a[i + 1] = '*';
}
} }
++i;
} }
cout << ans << endl; printf("%d\n", ans);
return 0;
} }
``` ```
## 选项 ## 选项
...@@ -97,32 +89,63 @@ int main() ...@@ -97,32 +89,63 @@ int main()
### A ### A
```cpp ```cpp
int main() char a[1005], b[1005];
struct node
{ {
string a, b; char ff[1005];
cin >> a >> b; int step;
int a1 = a.size(), b1 = b.size(), ans = 0; };
for (int i = 0; i < a1; i++)
void bfs()
{
queue<node> q;
node ll;
strcpy(ll.ff, a);
ll.step = 0;
q.push(ll);
while (!q.empty())
{ {
if (a[i] == b[i]) node tmp;
tmp = q.front();
q.pop();
if (!strcmp(tmp.ff, b))
{ {
continue; printf("%d\n", tmp.step);
return;
} }
else int num = strlen(tmp.ff);
for (int i = 0; i < num - 1; i++)
{ {
ans++; node now;
a[i] = b[i]; now = tmp;
if (a[i + 1] == '*') now.step++;
{ if (now.ff[i] == '*')
a[i] = 'o'; now.ff[i] = 'o';
}
else else
{ now.ff[i] = '*';
a[i] = '*'; if (now.ff[i + 1] == '*')
} now.ff[i + 1] = 'o';
else
now.ff[i + 1] = '*';
q.push(now);
} }
} }
cout << ans << endl; }
int main()
{
while (~scanf("%s", a))
{
scanf("%s", b);
bfs();
}
return 0; return 0;
} }
``` ```
...@@ -132,20 +155,24 @@ int main() ...@@ -132,20 +155,24 @@ int main()
```cpp ```cpp
int main() int main()
{ {
string a, b; string a;
string b;
cin >> a >> b; cin >> a >> b;
int a1 = a.size(), b1 = b.size(), ans = 0; int cnt = 0;
for (int i = 0; i < a1; i++) for (int i = 0; i < a.length(); i++)
{ {
if (a[i] == b[i]) if (a[i] != b[i])
{ {
continue;
}
else
{
ans++;
a[i] = b[i];
if (a[i] == '*') if (a[i] == '*')
{
a[i] = 'o';
}
else
{
a[i] = '*';
}
if (a[i + 1] == '*')
{ {
a[i + 1] = 'o'; a[i + 1] = 'o';
} }
...@@ -153,9 +180,10 @@ int main() ...@@ -153,9 +180,10 @@ int main()
{ {
a[i + 1] = '*'; a[i + 1] = '*';
} }
cnt++;
} }
} }
cout << ans << endl; cout << cnt;
return 0; return 0;
} }
``` ```
...@@ -178,13 +206,13 @@ int main() ...@@ -178,13 +206,13 @@ int main()
{ {
ans++; ans++;
a[i] = b[i]; a[i] = b[i];
if (a[i] == '*') if (a[i + 1] == '*')
{ {
a[i + 1] = '*'; a[i + 1] = 'o';
} }
else else
{ {
a[i + 1] = 'o'; a[i + 1] = '*';
} }
} }
} }
......
...@@ -29,13 +29,35 @@ ...@@ -29,13 +29,35 @@
对于所有评测用例,字符串由可见字符组成,长度不超过 100。 对于所有评测用例,字符串由可见字符组成,长度不超过 100。
请您补全以下代码:
```cpp
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char **argv)
{
string str;
cin >> str;
int A = 0, a = 0, number = 0;
int len = str.length();
for (int i = 0; i < len; i++)
{
__________________
}
cout << A << endl;
cout << a << endl;
cout << number << endl;
return 0;
}
```
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream>
using namespace std;
``` ```
### after ### after
...@@ -46,14 +68,6 @@ using namespace std; ...@@ -46,14 +68,6 @@ using namespace std;
## 答案 ## 答案
```cpp ```cpp
int main(int argc, char **argv)
{
string str;
cin >> str;
int A = 0, a = 0, number = 0;
int len = str.length();
for (int i = 0; i < len; i++)
{
if (str[i] <= '9' && str[i] >= '0') if (str[i] <= '9' && str[i] >= '0')
{ {
number++; number++;
...@@ -66,13 +80,6 @@ int main(int argc, char **argv) ...@@ -66,13 +80,6 @@ int main(int argc, char **argv)
{ {
a++; a++;
} }
}
cout << A << endl;
cout << a << endl;
cout << number << endl;
return 0;
}
``` ```
## 选项 ## 选项
...@@ -80,92 +87,50 @@ int main(int argc, char **argv) ...@@ -80,92 +87,50 @@ int main(int argc, char **argv)
### A ### A
```cpp ```cpp
int main(int argc, char **argv) if ('0' <= str[i] <= '0')
{
string str;
cin >> str;
int A = 0, a = 0, number = 0;
int len = str.length();
for (int i = 0; i < len; i++)
{
if (str[i] < '9' && str[i] > '0')
{ {
number++; number++;
} }
if (str[i] < 'Z' && str[i] > 'A') if ('A' <= str[i] <= 'Z')
{ {
A++; A++;
} }
if (str[i] < 'z' && str[i] > 'a') if ('a' <= str[i] <= 'z')
{ {
a++; a++;
} }
}
cout << A << endl;
cout << a << endl;
cout << number << endl;
return 0;
}
``` ```
### B ### B
```cpp ```cpp
int main(int argc, char **argv) if (str[i] <= '9' & str[i] >= '0')
{
string str;
cin >> str;
int A = 0, a = 0, number = 0;
int len = str.length();
for (int i = 0; i < len; i++)
{
if (str[i] < 71 && str[i] > 60)
{ {
number++; number++;
} }
if (str[i] < 132 && str[i] > 101) if (str[i] <= 'Z' & str[i] >= 'A')
{ {
A++; A++;
} }
if (str[i] < 172 && str[i] > 141) if (str[i] <= 'z' & str[i] >= 'a')
{ {
a++; a++;
} }
}
cout << A << endl;
cout << a << endl;
cout << number << endl;
return 0;
}
``` ```
### C ### C
```cpp ```cpp
int main(int argc, char **argv) if (str[i] < '9' && str[i] > '0')
{
string str;
cin >> str;
int A = 0, a = 0, number = 0;
int len = str.length();
for (int i = 0; i < len; i++)
{
if (str[i] < 39 && str[i] > 30)
{ {
number++; number++;
} }
if (str[i] < 132 && str[i] > 101) if (str[i] < 'Z' && str[i] > 'A')
{ {
A++; A++;
} }
if (str[i] <= 'z' && str[i] >= 'a') if (str[i] < 'z' && str[i] > 'a')
{ {
a++; a++;
} }
}
cout << A << endl;
cout << a << endl;
cout << number << endl;
return 0;
}
``` ```
...@@ -41,89 +41,53 @@ ...@@ -41,89 +41,53 @@
6 6
``` ```
以下错误的一项是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <stdio.h> #include <bits/stdc++.h>
int x = 0, number = 0, count = 0; using namespace std;
void Swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int getNum(int list[], int f, int r)
{
int i = 0, num = 0;
for (i = f; i <= r; i++)
num = list[i] + num * 10;
return num;
}
``` ```
### after ### after
```cpp ```cpp
int main()
{
int temp = 0;
int list[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
scanf("%d", &number);
temp = number;
while (temp != 0)
{
++x;
temp /= 10;
}
Prim(list, 0, 9);
printf("%d", count);
return 0;
}
``` ```
## 答案 ## 答案
```cpp ```cpp
void Prim(int list[], int k, int m) int main()
{ {
if (k == m - 1) int n, ans = 0;
scanf("%d", &n);
string s = "123456789";
do
{ {
int a = 0, b = 0, c = 0, bLast = 0; for (int i = 1; i <= 7; ++i)
for (int i = 0; i < x; i++)
{ {
a = getNum(list, 0, i); string a = s.substr(0, i);
bLast = ((number - a) * list[8]) % 10; int inta = atoi(a.c_str());
for (int j = i + (8 - i) / 2; j < 8; j++) if (inta >= n)
{ break;
if (list[j] == bLast)
{
b = getNum(list, i + 1, j);
c = getNum(list, j + 1, 8);
if (b % c == 0 && a + b / c == number)
{
++count; for (int j = i; j <= 9 - i; ++j)
} {
break; string b = s.substr(i, j);
} string c = s.substr(i + j);
int intb = atoi(b.c_str());
int intc = atoi(c.c_str());
if (intb % intc == 0 && inta + intb / intc == n)
ans++;
} }
} }
} } while (next_permutation(s.begin(), s.end()));
else printf("%d\n", ans);
{ return 0;
for (int i = k; i < m; i++)
{
Swap(list[k], list[i]);
Prim(list, k + 1, m);
Swap(list[k], list[i]);
}
}
} }
``` ```
## 选项 ## 选项
...@@ -132,119 +96,160 @@ void Prim(int list[], int k, int m) ...@@ -132,119 +96,160 @@ void Prim(int list[], int k, int m)
### A ### A
```cpp ```cpp
void Prim(int list[], int k, int m) int visit[10] = {0};
int s[10];
int ans = 0;
int N;
void found(int s[])
{ {
if (k == m - 1) int x, y, z;
for (int i = 1; i < 9; i++)
{ {
int a = 0, b = 0, c = 0, bLast = 0; for (int j = i + 1; j < 9; j++)
for (int i = 0; i < x; i++)
{ {
a = getNum(list, 0, i); x = y = z = 0;
bLast = ((number - a) * list[8]) % 10; for (int k = 0; k < 9; k++)
for (int j = i + (8 - i) / 2; j < 8; j++)
{ {
if (list[j] == bLast) if (k < i)
{ x = x * 10 + s[k + 1];
b = getNum(list, i, j); else if (k < j)
c = getNum(list, j, 8); y = y * 10 + s[k + 1];
if (b % c == 0 && a + b / c == number) else
{ z = z * 10 + s[k + 1];
}
++count; if (y % z == 0 && x + y / z == N)
} {
break; ans++;
}
} }
} }
} }
}
void dfs(int pos, int n)
{
if (pos == n)
found(s);
else else
{ {
for (int i = k; i < m; i++) for (int i = 1; i <= 9; i++)
{ {
if (!visit[i])
Swap(list[k], list[i]); {
Prim(list, k + 1, m); s[pos] = i;
visit[i] = 1;
Swap(list[k], list[i]); dfs(pos + 1, n);
visit[i] = 0;
}
} }
} }
} }
int main()
{
cin >> N;
dfs(1, 10);
cout << ans << endl;
return 0;
}
``` ```
### B ### B
```cpp ```cpp
void Prim(int list[], int k, int m) int parse(const char *arr, int pos, int len)
{
int ans = 0;
int t = 1;
for (int i = pos + len - 1; i >= pos; i--)
{
ans += (arr[i] - '0') * t;
t *= 10;
}
return ans;
}
int main()
{ {
if (k == m - 1) int N;
cin >> N;
int ans = 0;
string s = "123456789";
do
{ {
int a = 0, b = 0, c = 0, bLast = 0; const char *str = s.c_str();
for (int i = 0; i < x; i++) for (int i = 0; i <= 7; i++)
{ {
a = getNum(list, 0, i);
bLast = ((number - a) * list[8]) % 10; int inta = parse(str, 0, i);
for (int j = i + (8 - i) / 2; j < 8; j++)
if (inta >= N)
break;
for (int j = 1; j <= 9 - 1 - i; j++)
{ {
b = getNum(list, i, j); int intb = parse(str, i, j);
c = getNum(list, j, 8); int intc = parse(str, i + j, 9 - i - j);
if (b % c == 0 && a + b / c == number) if (intb % intc == 0 && inta + intb / intc == N)
{ {
ans++;
++count;
} }
break;
} }
} }
} } while (next_permutation(s.begin(), s.end()));
else
{
for (int i = k; i < m; i++)
{
Swap(list[k], list[i]); cout << ans;
Prim(list, k + 1, m); return 0;
Swap(list[k], list[i]);
}
}
} }
``` ```
### C ### C
```cpp ```cpp
void Prim(int list[], int k, int m) int a[10] = {0};
int Division(int m)
{ {
if (k == m - 1) int t;
while (m)
{ {
int a = 0, b = 0, c = 0, bLast = 0; t = m % 10;
for (int i = 0; i < x; i++) if (t == 0)
{ {
a = getNum(list, 0, i); return 0;
bLast = ((number - a) * list[8]) % 10;
for (int j = i + (8 - i) / 2; j < 8; j++)
{
if (list[j] == bLast)
{
b = getNum(list, i + 1, j);
c = getNum(list, j + 1, 8);
++count;
break;
}
}
} }
a[t]++;
m = m / 10;
} }
else return 1;
}
int main()
{
int i, k, j;
int number, ans = 0, flag;
cin >> number;
for (i = 1; i < number; i++)
{ {
for (int i = k; i < m; i++) for (j = 1; j <= 4938; j++)
{ {
memset(a, 0, sizeof(a));
Swap(list[k], list[i]); k = (number - i) * j;
Prim(list, k + 1, m); if (Division(i) && Division(j) && Division(k))
{
Swap(list[k], list[i]); flag = 1;
for (int x = 1; x < 10; x++)
{
if (a[x] != 1)
{
flag = 0;
break;
}
}
if (flag == 1)
ans++;
}
} }
} }
cout << ans;
return 0;
} }
``` ```
...@@ -9,34 +9,43 @@ C国最多可以派出2人。 ...@@ -9,34 +9,43 @@ C国最多可以派出2人。
那么最终派往W星的观察团会有多少种国别的不同组合呢? 那么最终派往W星的观察团会有多少种国别的不同组合呢?
**输入格式** 下面的程序解决了这个问题。
请你补全代码中空白的部分:
第一行N,以下N行代表N个国家最多可派出人数Ai。 ```cpp
#include <bits/stdc++.h>
**输出格式** using namespace std;
最多多少种派法ANS,ANS为一个整数。
**输出规模**
``` #define N 6
1<N<10000 #define M 5
1<AI<10000 #define BUF 1024
```
**示例输入**
``` void f(int a[], int k, int m, char b[])
6 {
4 int i, j;
2
2 if (k == N)
1 {
1 b[M] = 0;
3 if (m == 0)
``` printf("%s\n", b);
**示例输出** return;
``` }
101
for (i = 0; i <= a[k]; i++)
{
for (j = 0; j < i; j++)
b[M - m + j] = k + 'A';
__________________
}
}
int main()
{
int a[N] = {4, 2, 2, 1, 1, 3};
char b[BUF];
f(a, 0, M, b);
return 0;
}
``` ```
...@@ -45,45 +54,18 @@ C国最多可以派出2人。 ...@@ -45,45 +54,18 @@ C国最多可以派出2人。
### before ### before
```cpp ```cpp
#include <iostream>
using namespace std;
int a[10000], N, i, ans = 0;
``` ```
### after ### after
```cpp ```cpp
int main()
{
cin >> N;
for (i = 0; i < N; i++)
{
cin >> a[i];
}
findAns(a, 0, 0);
cout << ans << endl;
return 0;
}
``` ```
## 答案 ## 答案
```cpp ```cpp
void findAns(int a[], int start, int An) f(a, k + 1, m - i, b);
{
if (start == N)
{
if (An == 5)
ans++;
return;
}
for (i = 0; i <= a[start]; i++)
{
findAns(a, start + 1, An + i);
}
}
``` ```
## 选项 ## 选项
...@@ -91,56 +73,17 @@ void findAns(int a[], int start, int An) ...@@ -91,56 +73,17 @@ void findAns(int a[], int start, int An)
### A ### A
```cpp ```cpp
void findAns(int a[], int start, int An) f(a, k, m - i, b);
{
if (start == N)
{
if (An == 5)
ans++;
return;
}
for (i = 0; i <= a[start]; i++)
{
findAns(a, start + 1, An);
}
}
``` ```
### B ### B
```cpp ```cpp
void findAns(int a[], int start, int An) f(a, k - 1, m - i, b);
{
if (start == N)
{
if (An == 5)
ans++;
return;
}
for (i = 0; i <= a[start]; i++)
{
findAns(a, start, An + i);
}
}
``` ```
### C ### C
```cpp ```cpp
void findAns(int a[], int start, int An) f(a, k + 1, m + i, b);
{
if (start == N)
{
if (An == 5)
ans++;
return;
}
for (i = 0; i <= a[start]; i++)
{
findAns(a, start, An + 1);
}
}
``` ```
...@@ -58,21 +58,31 @@ ran=6 ...@@ -58,21 +58,31 @@ ran=6
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
``` ```
小明开动脑筋,编写了如下的程序,实现该图形的打印。 请你补全程序,实现该图形的打印。
## aop
### before
```cpp ```cpp
#include <cstdio> #include <bits/stdc++.h>
using namespace std;
#define N 70 #define N 70
```
### after
```cpp void f(char a[][N], int rank, int row, int col)
{
if (rank == 1)
{
a[row][col] = '*';
return;
}
int w = 1;
int i;
for (i = 0; i < rank - 1; i++)
w *= 2;
__________________
f(a, rank - 1, row + w / 2, col);
f(a, rank - 1, row + w / 2, col + w);
}
int main() int main()
{ {
char a[N][N]; char a[N][N];
...@@ -81,7 +91,6 @@ int main() ...@@ -81,7 +91,6 @@ int main()
for (j = 0; j < N; j++) for (j = 0; j < N; j++)
a[i][j] = ' '; a[i][j] = ' ';
f(a, 4, 0, 0); f(a, 4, 0, 0);
for (i = 0; i < N; i++) for (i = 0; i < N; i++)
{ {
...@@ -92,28 +101,25 @@ int main() ...@@ -92,28 +101,25 @@ int main()
return 0; return 0;
} }
```
## aop
### before
```cpp
```
### after
```cpp
``` ```
## 答案 ## 答案
```cpp ```cpp
void f(char a[][N], int rank, int row, int col) f(a, rank - 1, row, col + w / 2);
{
if (rank == 1)
{
a[row][col] = '*';
return;
}
int w = 1;
int i;
for (i = 0; i < rank - 1; i++)
w *= 2;
f(a, rank - 1, row, col + w / 2);
f(a, rank - 1, row + w / 2, col);
f(a, rank - 1, row + w / 2, col + w);
}
``` ```
## 选项 ## 选项
...@@ -121,62 +127,17 @@ void f(char a[][N], int rank, int row, int col) ...@@ -121,62 +127,17 @@ void f(char a[][N], int rank, int row, int col)
### A ### A
```cpp ```cpp
void f(char a[][N], int rank, int row, int col) f(a, rank, row, col + w / 2);
{
if (rank == 1)
{
a[row][col] = '*';
return;
}
int w = 1;
int i;
for (i = 0; i < rank; i++)
w *= 2;
f(a, rank - 1, row, col + w / 2);
f(a, rank - 1, row + w / 2, col);
f(a, rank - 1, row + w / 2, col + w);
}
``` ```
### B ### B
```cpp ```cpp
void f(char a[][N], int rank, int row, int col) f(a, rank - 1, row, col + w);
{
if (rank == 1)
{
a[row][col] = '*';
return;
}
int w = 1;
int i;
for (i = 0; i < rank - 1; i++)
w *= 2;
f(a, rank + 1, row, col + w / 2);
f(a, rank + 1, row + w / 2, col);
f(a, rank + 1, row + w / 2, col + w);
}
``` ```
### C ### C
```cpp ```cpp
void f(char a[][N], int rank, int row, int col) f(a, rank + 1, row, col + w / 2);
{
if (rank == 1)
{
a[row][col] = '*';
return;
}
int w = 0;
int i;
for (i = 0; i < rank - 1; i++)
w *= 2;
f(a, rank - 1, row, col + w / 2);
f(a, rank - 1, row + w / 2, col);
f(a, rank - 1, row + w / 2, col + w);
}
``` ```
...@@ -34,33 +34,20 @@ ...@@ -34,33 +34,20 @@
包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、18、20。 包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、18、20。
下面的代码实现了这一功能,请你补全代码中的空白处:
## aop
### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
#include <algorithm>
using namespace std; using namespace std;
const int N = 1e5 + 10; const int N = 1e5 + 10;
int a[N]; int a[N];
int gcd(int a, int b) int gcd(int a, int b)
{ {
return b ? gcd(b, a % b) : a; __________________
} }
```
### after
```cpp
```
## 答案
```cpp
int main() int main()
{ {
int n; int n;
...@@ -68,95 +55,56 @@ int main() ...@@ -68,95 +55,56 @@ int main()
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
cin >> a[i]; cin >> a[i];
sort(a, a + n); sort(a, a + n);
int d = 0; int d = 0;
for (int i = 1; i < n; i++) for (int i = 1; i < n; i++)
d = gcd(d, a[i] - a[0]); d = gcd(d, a[i] - a[0]);
if (d) if (d)
cout << (a[n - 1] - a[0]) / d + 1; cout << (a[n - 1] - a[0]) / d + 1;
else else
cout << n; cout << n;
return 0; return 0;
} }
``` ```
## 选项
## aop
### A ### before
```cpp ```cpp
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
int d = 0; ```
for (int i = 1; i < n; i++) ### after
d = gcd(d, a[i] - a[0]);
if (d) ```cpp
cout << (a[n] - a[0]) / d + 1;
else
cout << n;
return 0;
}
``` ```
### B ## 答案
```cpp ```cpp
int main() return b ? gcd(b, a % b) : a;
{ ```
int n; ## 选项
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
int d = 0; ### A
for (int i = 1; i < n; i++)
d = gcd(d, a[i] - a[0]);
if (d)
cout << (a[n - 1] - a[0]) / d;
else
cout << n;
return 0; ```cpp
} return b ? gcd(b, a) : a;
``` ```
### C ### B
```cpp ```cpp
int main() return b ? gcd(b, a / b) : a;
{ ```
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
int d = 0;
for (int i = 1; i < n; i++)
d = gcd(d, a[i] - a[0]);
if (d) ### C
cout << (a[n + 1] - a[0]) / d + 1;
else
cout << n;
return 0; ```cpp
} return b ? gcd(b, a + b) : a;
``` ```
...@@ -58,15 +58,12 @@ ...@@ -58,15 +58,12 @@
峰值内存消耗(含虚拟机) < 256M 峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms CPU消耗 < 1000ms
下面的代码实现了这一功能,请你补全空白处缺失的代码:
## aop
### before
```cpp ```cpp
#include <bits/stdc++.h> #include <bits/stdc++.h>
using namespace std; using namespace std;
typedef long long ll; typedef long long ll;
const int maxn = 100000; const int maxn = 100000;
ll s[maxn + 10], dp[maxn + 10], inv[maxn + 10], f[maxn + 10]; ll s[maxn + 10], dp[maxn + 10], inv[maxn + 10], f[maxn + 10];
...@@ -90,16 +87,7 @@ ll C(ll n, ll m) ...@@ -90,16 +87,7 @@ ll C(ll n, ll m)
{ {
return (f[n] * inv[f[m]]) % mod * inv[f[n - m]] % mod; return (f[n] * inv[f[m]]) % mod * inv[f[n - m]] % mod;
} }
```
### after
```cpp
```
## 答案
```cpp
int main() int main()
{ {
cin >> n; cin >> n;
...@@ -121,108 +109,49 @@ int main() ...@@ -121,108 +109,49 @@ int main()
{ {
if (i * 2 + 1 <= n) if (i * 2 + 1 <= n)
{ {
dp[i] = (C(s[i] - 1, s[i * 2 + 1]) * dp[i * 2 + 1]) % mod * dp[i * 2] % mod; __________________
} }
} }
cout << dp[1] << endl; cout << dp[1] << endl;
return 0; return 0;
} }
``` ```
## aop
### before
```cpp
```
### after
```cpp
```
## 答案
```cpp
dp[i] = (C(s[i] - 1, s[i * 2 + 1]) * dp[i * 2 + 1]) % mod * dp[i * 2] % mod;
```
## 选项 ## 选项
### A ### A
```cpp ```cpp
int main() dp[i] = (C(s[i], s[i * 2 + 1]) * dp[i * 2 + 1]) % mod * dp[i * 2 + 1] % mod;
{
cin >> n;
f[0] = 1;
for (int i = 1; i <= maxn; i++)
{
f[i] = (f[i - 1] * i) % mod;
inv[i] = qPow(i, mod - 2);
}
for (int i = n; i >= 1; i--)
{
s[i] = (s[i * 2 + 1] <= n ? s[i * 2 + 1] : 0) + (s[i * 2] <= n ? s[i * 2] : 0) + 1;
}
for (int i = 1; i <= n; i++)
{
dp[i] = 1;
}
for (int i = n; i >= 1; i--)
{
if (i * 2 + 1 <= n)
{
dp[i] = (C(s[i] - 1, s[i * 2 - 1]) * dp[i * 2 + 1]) % mod * dp[i * 2] % mod;
}
}
cout << dp[1] << endl;
return 0;
}
``` ```
### B ### B
```cpp ```cpp
int main() dp[i] = (C(s[i] - 1, s[i * 2]) * dp[i * 2]) % mod * dp[i * 2] % mod;
{
cin >> n;
f[0] = 1;
for (int i = 1; i <= maxn; i++)
{
f[i] = (f[i - 1] * i) % mod;
inv[i] = qPow(i, mod - 2);
}
for (int i = n; i >= 1; i--)
{
s[i] = (s[i * 2 + 1] <= n ? s[i * 2 + 1] : 0) + (s[i * 2] <= n ? s[i * 2] : 0) + 1;
}
for (int i = 1; i <= n; i++)
{
dp[i] = 1;
}
for (int i = n; i >= 1; i--)
{
if (i * 2 + 1 <= n)
{
dp[i] = (C(s[i] - 1, s[i * 2 - 1]) * dp[i * 2 - 1]) % mod * dp[i * 2] % mod;
}
}
cout << dp[1] << endl;
return 0;
}
``` ```
### C ### C
```cpp ```cpp
int main() dp[i] = (C(s[i] + 1, s[i * 2 + 1]) * dp[i * 2 + 1]) % mod * dp[i * 2] % mod;
{
cin >> n;
f[0] = 1;
for (int i = 1; i <= maxn; i++)
{
f[i] = (f[i - 1] * i) % mod;
inv[i] = qPow(i, mod - 2);
}
for (int i = n; i >= 1; i--)
{
s[i] = (s[i * 2 + 1] <= n ? s[i * 2 + 1] : 0) + (s[i * 2] <= n ? s[i * 2] : 0) + 1;
}
for (int i = 1; i <= n; i++)
{
dp[i] = 1;
}
for (int i = n; i >= 1; i--)
{
if (i * 2 + 1 <= n)
{
dp[i] = (C(s[i], s[i * 2]) * dp[i * 2]) % mod * dp[i * 2] % mod;
}
}
cout << dp[1] << endl;
return 0;
}
``` ```
...@@ -12,56 +12,18 @@ ...@@ -12,56 +12,18 @@
### before ### before
```cpp ```cpp
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int a[10];
int ans;
``` ```
### after ### after
```cpp ```cpp
int main()
{
for (int i = 0; i <= 9; i++)
a[i] = i;
do
{
if (check())
ans++;
} while (next_permutation(a, a + 10));
cout << ans;
return 0;
}
``` ```
## 答案 ## 答案
```cpp ```cpp
bool check() 1580
{
if (abs(a[0] - a[1]) == 1 || abs(a[0] - a[3]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[0] - a[5]) == 1)
return false;
if (abs(a[1] - a[2]) == 1 || abs(a[1] - a[4]) == 1 || abs(a[1] - a[5]) == 1 || abs(a[1] - a[6]) == 1)
return false;
if (abs(a[2] - a[5]) == 1 || abs(a[2] - a[6]) == 1)
return false;
if (abs(a[3] - a[4]) == 1 || abs(a[3] - a[7]) == 1 || abs(a[3] - a[8]) == 1)
return false;
if (abs(a[4] - a[5]) == 1 || abs(a[4] - a[7]) == 1 || abs(a[4] - a[8]) == 1 || abs(a[4] - a[9]) == 1)
return false;
if (abs(a[5] - a[6]) == 1 || abs(a[5] - a[8]) == 1 || abs(a[5] - a[9]) == 1)
return false;
if (abs(a[6] - a[9]) == 1)
return false;
if (abs(a[7] - a[8]) == 1 || abs(a[8] - a[9]) == 1)
return false;
return true;
}
``` ```
## 选项 ## 选项
...@@ -69,76 +31,17 @@ bool check() ...@@ -69,76 +31,17 @@ bool check()
### A ### A
```cpp ```cpp
bool check() 1579
{
if (abs(a[0] - a[1]) == 1 || abs(a[0] - a[3]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[0] - a[5]) == 1)
return false;
if (abs(a[1] - a[2]) == 1 || abs(a[1] - a[4]) == 1 || abs(a[1] - a[5]) == 1 || abs(a[1] - a[6]) == 1)
return false;
if (abs(a[2] - a[5]) == 1 || abs(a[2] - a[6]) == 1)
return false;
if (abs(a[3] - a[4]) == 1 || abs(a[3] - a[7]) == 1 || abs(a[3] - a[8]) == 1)
return false;
if (abs(a[4] - a[5]) == 1 || abs(a[4] - a[7]) == 1 || abs(a[4] - a[8]) == 1 || abs(a[4] - a[9]) == 1)
return false;
if (abs(a[5] - a[6]) == 1 || abs(a[5] - a[8]) == 1 || abs(a[5] - a[9]) == 1)
return false;
if (abs(a[6] - a[7]) == 1)
return false;
if (abs(a[7] - a[8]) == 1 || abs(a[8] - a[9]) == 1)
return false;
return true;
}
``` ```
### B ### B
```cpp ```cpp
bool check() 1582
{
if (abs(a[0] - a[1]) == 1 || abs(a[0] - a[3]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[0] - a[5]) == 1)
return false;
if (abs(a[1] - a[2]) == 1 || abs(a[1] - a[4]) == 1 || abs(a[1] - a[5]) == 1 || abs(a[1] - a[6]) == 1)
return false;
if (abs(a[2] - a[5]) == 1 || abs(a[2] - a[6]) == 1)
return false;
if (abs(a[3] - a[4]) == 1 || abs(a[3] - a[7]) == 1 || abs(a[3] - a[8]) == 1)
return false;
if (abs(a[4] - a[5]) == 1 || abs(a[4] - a[7]) == 1 || abs(a[4] - a[8]) == 1 || abs(a[4] - a[9]) == 1)
return false;
if (abs(a[5] - a[6]) == 1 || abs(a[5] - a[8]) == 1 || abs(a[5] - a[9]) == 1)
return false;
if (abs(a[6] - a[7]) == 1)
return false;
if (abs(a[7] - a[8]) == 1)
return false;
if (abs(a[8] - a[9]) == 1)
return false;
return true;
}
``` ```
### C ### C
```cpp ```cpp
bool check() 1581
{
if (abs(a[0] - a[1]) == 1 || abs(a[0] - a[3]) == 1 || abs(a[0] - a[4]) == 1 || abs(a[0] - a[5]) == 1)
return false;
if (abs(a[1] - a[2]) == 1 || abs(a[1] - a[4]) == 1 || abs(a[1] - a[5]) == 1 || abs(a[1] - a[6]) == 1)
return false;
if (abs(a[2] - a[5]) == 1 || abs(a[2] - a[6]) == 1)
return false;
if (abs(a[3] - a[4]) == 1 || abs(a[3] - a[7]) == 1 || abs(a[3] - a[8]) == 1)
return false;
if (abs(a[4] - a[5]) == 1 || abs(a[4] - a[7]) == 1 || abs(a[4] - a[8]) == 1 || abs(a[4] - a[9]) == 1)
return false;
if (abs(a[5] - a[6]) == 1 || abs(a[5] - a[8]) == 1 || abs(a[5] - a[9]) == 1)
return false;
if (abs(a[6] - a[9]) == 1)
return false;
if (abs(a[7] - a[8]) == 1)
return false;
return true;
}
``` ```
# 放棋子 # 放棋子
今有6×6的棋盘,其中某些格子已预放了棋子。现在要再放上去一些,使得每行每列都正好有3颗棋子。我们希望推算出所有可能的放法,下面的代码就实现了这个功能。初始数组中,“1”表示放有棋子,“0”表示空白。 今有6×6的棋盘,其中某些格子已预放了棋子。现在要再放上去一些,使得每行每列都正好有3颗棋子。最多有多少种放法?
![](https://img-blog.csdn.net/20170302185510449) ![](https://img-blog.csdn.net/20170302185510449)
## aop ## aop
...@@ -8,130 +9,18 @@ ...@@ -8,130 +9,18 @@
### before ### before
```cpp ```cpp
#include <iostream>
#include <cstdio>
int N = 0;
bool CheckStoneNum(int x[][6])
{
for (int k = 0; k < 6; ++k)
{
int NumRow = 0, NumCol = 0;
for (int i = 0; i < 6; ++i)
{
if (x[k][i])
NumRow++;
if (x[i][k])
NumCol++;
}
if (NumRow != 3 || NumCol != 3)
return false;
}
return true;
}
int GetRowStoneNum(int x[][6], int r)
{
int sum = 0;
for (int i = 0; i < 6; ++i)
{
if (x[r][i])
sum++;
}
return sum;
}
int GetColStoneNum(int x[][6], int c)
{
int sum = 0;
for (int i = 0; i < 6; ++i)
{
if (x[i][c])
sum++;
}
return sum;
}
void show(int x[][6])
{
for (int i = 0; i < 6; ++i)
{
for (int j = 0; j < 6; ++j)
{
printf("%2d", x[i][j]);
}
printf("\n");
}
printf("\n");
}
void f(int x[][6], int r, int c);
void GoNext(int x[][6], int r, int c)
{
if (c < 6)
{
f(x, r, c + 1);
}
else
{
f(x, r + 1, 0);
}
}
``` ```
### after ### after
```cpp ```cpp
int main()
{
int x[6][6] = {
{1, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 1, 0},
{0, 0, 1, 1, 0, 1},
{0, 1, 0, 0, 1, 0},
{0, 0, 0, 1, 0, 0},
{1, 0, 1, 0, 0, 1},
};
f(x, 0, 0);
printf("%d\n", N);
return 0;
}
``` ```
## 答案 ## 答案
```cpp ```cpp
void f(int x[][6], int r, int c) 16
{
if (r == 6)
{
if (CheckStoneNum(x))
{
N++;
show(x);
}
return;
}
if (x[r][c])
{
GoNext(x, r, c);
return;
}
int rr = GetRowStoneNum(x, r);
int cc = GetColStoneNum(x, c);
if (cc >= 3)
{
GoNext(x, r, c);
}
else if (rr >= 3)
{
f(x, r + 1, 0);
}
else
{
x[r][c] = 1;
GoNext(x, r, c);
x[r][c] = 0;
if (!(3 - rr >= 6 - c || 3 - cc >= 6 - r))
{
GoNext(x, r, c);
}
}
}
``` ```
## 选项 ## 选项
...@@ -139,116 +28,17 @@ void f(int x[][6], int r, int c) ...@@ -139,116 +28,17 @@ void f(int x[][6], int r, int c)
### A ### A
```cpp ```cpp
void f(int x[][6], int r, int c) 17
{
if (r == 6)
{
if (CheckStoneNum(x))
{
N++;
show(x);
}
return;
}
if (x[r][c])
{
GoNext(x, r, c);
return;
}
int rr = GetRowStoneNum(x, r);
int cc = GetColStoneNum(x, c);
if (cc >= 3)
{
GoNext(x, r, c);
}
else if (rr >= 3)
{
f(x, r + 1, 0);
}
else
{
x[r][c] = 1;
GoNext(x, r, c);
x[r][c] = 0;
}
}
``` ```
### B ### B
```cpp ```cpp
void f(int x[][6], int r, int c) 18
{
if (r == 6)
{
if (CheckStoneNum(x))
{
N++;
show(x);
}
return;
}
if (x[r][c])
{
GoNext(x, r, c);
return;
}
int rr = GetRowStoneNum(x, r);
int cc = GetColStoneNum(x, c);
if (cc >= 3)
{
GoNext(x, r, c);
}
else if (rr >= 3)
{
f(x, r + 1, 0);
}
else
{
if (!(3 - rr >= 6 - c || 3 - cc >= 6 - r))
{
GoNext(x, r, c);
}
}
}
``` ```
### C ### C
```cpp ```cpp
void f(int x[][6], int r, int c) 19
{
if (r == 6)
{
if (CheckStoneNum(x))
{
N++;
show(x);
}
return;
}
if (x[r][c])
{
GoNext(x, r, c);
return;
}
int rr = GetRowStoneNum(x, r);
int cc = GetColStoneNum(x, c);
if (cc >= 3)
{
GoNext(x, r, c);
}
else if (rr >= 3)
{
f(x, r + 1, 0);
}
else
{
x[r][c] = 0;
if (!(3 - rr >= 6 - c || 3 - cc >= 6 - r))
{
GoNext(x, r, c);
}
}
}
``` ```
...@@ -41,16 +41,14 @@ ...@@ -41,16 +41,14 @@
![](https://img-blog.csdnimg.cn/20190203175213126.png) ![](https://img-blog.csdnimg.cn/20190203175213126.png)
以下代码不能实现该功能的一项是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <bits/stdc++.h>
using namespace std;
string str;
stringstream ss;
``` ```
### after ### after
...@@ -61,62 +59,55 @@ stringstream ss; ...@@ -61,62 +59,55 @@ stringstream ss;
## 答案 ## 答案
```cpp ```cpp
string s;
void init()
{
for (int i = 1; i <= 1000; i++)
{
string str = "";
int x = i;
while (x != 0)
{
str += (char)(x % 10 + '0');
x = x / 10;
}
reverse(str.begin(), str.end());
s += str;
}
}
int main() int main()
{ {
init();
int n; int n;
cin >> n; while (cin >> n)
int x = 2 * n - 1; {
for (int i = 1; i <= 1500; i++) for (int i = 1; i < n; i++)
{ {
string str1; for (int j = 1; j <= n - i; j++)
ss << i;
ss >> str1;
str += str1;
ss.clear();
}
int length = 4 * n - 4;
for (int i = 1; i <= n; i++)
{
if (i != n && i != 1)
{
for (int j = 1; j <= n + i - 1; j++)
{ {
if (j == n - i + 1) cout << ".";
{
cout << str[i - 1];
}
else if (j == 2 * n - (n - i + 1))
{
cout << str[4 * n - 4 - (i - 1)] << endl;
}
else
{
cout << '.';
}
} }
} cout << s[i - 1];
else if (i == 1)
{ if (i != 1)
for (int x = 1; x <= n; x++) {
{ for (int j = 1; j < i - 1; j++)
if (x == n)
{
cout << '1' << endl;
}
else
{ {
cout << '.'; cout << ".";
} }
cout << s[4 * (n - 1) + 1 - i];
} }
cout << endl;
} }
else for (int i = 0; i < 2 * (n - 1) + 1; i++)
{ {
for (int m = 1; m <= 2 * n - 1; m++) cout << s[n - 1 + i];
{
cout << str[n + (m - 2)];
}
} }
cout << endl;
} }
return 0; return 0;
} }
``` ```
...@@ -129,59 +120,145 @@ int main() ...@@ -129,59 +120,145 @@ int main()
int main() int main()
{ {
int n; int n;
cin >> n; scanf("%d", &n);
int x = 2 * n - 1; int s = 0;
for (int i = 1; i <= 1500; i++)
{ int q = 0, w = 0, count = 1;
string str1; int arr[300][600];
ss << i; int p = n - 1, r = n;
ss >> str1;
str += str1; for (int i = 0; i < n - 1; i++)
ss.clear(); {
} for (int j = 0; j < r; j++)
int length = 4 * n - 4; {
for (int i = 1; i <= n; i++) if (j == p)
{
if (i != n && i != 1)
{
for (int j = 1; j <= n + i - 1; j++)
{ {
if (j == n - i + 1) if (s == 2)
{ {
cout << str[i - 1]; s = 1;
arr[i][j] = q + '0';
} }
else if (j == 2 * n - (n - i + 1)) else if (s == 1)
{ {
cout << str[4 * n - 4 - i] << endl; s = 0;
arr[i][j] = w + '0';
} }
else else
{ {
cout << '.'; arr[i][j] = count + '0';
count++;
if (count == 10)
{
count = 0;
w++;
if (w == 10)
{
w = 0;
q++;
}
}
if (w != 0)
{
s = 1;
}
if (q != 0)
{
s = 2;
}
} }
} }
else
{
arr[i][j] = '.';
}
} }
else if (i == 1) p--;
r++;
}
for (int j = 0; j < r; j++)
{
if (s == 2)
{ {
for (int x = 1; x <= n; x++) s = 1;
{ arr[n - 1][j] = q + '0';
if (x == n) }
{ else if (s == 1)
cout << '1' << endl; {
} s = 0;
else arr[n - 1][j] = w + '0';
}
else
{
arr[n - 1][j] = count + '0';
count++;
if (count == 10)
{
count = 0;
w++;
if (w == 10)
{ {
cout << '.'; w = 0;
q++;
} }
} }
if (w != 0)
{
s = 1;
}
if (q != 0)
{
s = 2;
}
}
}
r--;
for (int i = n - 2; i > 0; i--)
{
r--;
if (s == 2)
{
s = 1;
arr[i][r] = q + '0';
}
else if (s == 1)
{
s = 0;
arr[i][r] = w + '0';
} }
else else
{ {
for (int m = 1; m <= 2 * n - 1; m++) arr[i][r] = count + '0';
{ count++;
cout << str[n + (m - 2)]; if (count == 10)
{
count = 0;
w++;
if (w == 10)
{
w = 0;
q++;
}
}
if (w != 0)
{
s = 1;
}
if (q != 0)
{
s = 2;
} }
} }
} }
r = n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < r; j++)
{
printf("%c", arr[i][j]);
}
printf("\n");
r++;
}
return 0; return 0;
} }
``` ```
...@@ -189,61 +266,72 @@ int main() ...@@ -189,61 +266,72 @@ int main()
### B ### B
```cpp ```cpp
int a[3005], n;
char m[1300][1300];
void init()
{
int cnt = 1, p = 1;
while (1)
{
if (cnt >= 3000)
break;
if (p < 10)
a[cnt++] = p;
else if (p < 100 && p >= 10)
{
a[cnt++] = p / 10;
a[cnt++] = p % 10;
}
else if (p >= 100 && p < 1000)
{
a[cnt++] = p / 100;
a[cnt++] = p / 10 % 10;
a[cnt++] = p % 10;
}
else if (p >= 1000 && p < 9999)
{
a[cnt++] = p / 1000;
a[cnt++] = p / 100 % 10;
a[cnt++] = p / 10 % 10;
a[cnt++] = p % 10;
}
p++;
}
}
int main() int main()
{ {
int n; init();
cin >> n; cin >> n;
int x = 2 * n - 1;
for (int i = 1; i <= 1500; i++) int cnt = 1;
{ for (int i = 1; i <= n - 1; i++)
string str1; {
ss << i; for (int j = n; j >= 1; j--)
ss >> str1; if (i + j == n + 1)
str += str1; m[i][j] = a[cnt++] + '0';
ss.clear(); else
m[i][j] = '.';
} }
int length = 4 * n - 4; for (int i = 1; i <= n * 2 - 1; i++)
for (int i = 1; i <= n; i++) m[n][i] = a[cnt++] + '0';
{ for (int i = n - 1; i >= 2; i--)
if (i != n && i != 1) {
{ for (int j = 2 * n - 2; j >= n; j--)
for (int j = 1; j <= n + i - 1; j++)
{
if (j == n - i + 1)
{
cout << str[i - 1];
}
else if (j == 2 * n - (n - i + 1))
{
cout << str[4 * n - 4 - (i + 1)] << endl;
}
else
{
cout << '.';
}
}
}
else if (i == 1)
{ {
for (int x = 1; x <= n; x++) if (j - i == n - 1)
{ m[i][j] = a[cnt++] + '0';
if (x == n) else
{ m[i][j] = '.';
cout << '1' << endl;
}
else
{
cout << '.';
}
}
} }
else }
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n + i - 1; j++)
{ {
for (int m = 1; m <= 2 * n - 1; m++) cout << m[i][j];
{
cout << str[n + (m - 2)];
}
} }
cout << endl;
} }
return 0; return 0;
} }
...@@ -252,33 +340,36 @@ int main() ...@@ -252,33 +340,36 @@ int main()
### C ### C
```cpp ```cpp
string str;
stringstream ss;
int main() int main()
{ {
int n; int n;
cin >> n; cin >> n;
int x = 2 * n - 1; int x = 2 * n - 1;
for (int i = 1; i <= 1500; i++) for (int i = 1; i <= 1500; i++)
{ {
string str1; string str1;
ss << i; ss << i;
ss >> str1; ss >> str1;
str += str1; str += str1;
ss.clear(); ss.clear();
} }
int length = 4 * n - 4; int length = 4 * n - 4;
for (int i = 1; i <= n; i++) for (int i = 1; i <= n; i++)
{ {
if (i != n && i != 1) if (i != n && i != 1)
{ {
for (int j = 1; j <= n + i - 1; j++) for (int j = 1; j <= n + i - 1; j++)
{ {
if (j == n - i + 1) if (j == n - i + 1)
{ {
cout << str[i - 1]; cout << str[i - 1];
} }
else if (j == 2 * n - (n - i + 1)) else if (j == 2 * n - (n - i + 1))
{ {
cout << str[4 * n - 4 + i] << endl; cout << str[4 * n - 4 - (i - 1)] << endl;
} }
else else
{ {
...@@ -289,7 +380,7 @@ int main() ...@@ -289,7 +380,7 @@ int main()
else if (i == 1) else if (i == 1)
{ {
for (int x = 1; x <= n; x++) for (int x = 1; x <= n; x++)
{ {
if (x == n) if (x == n)
{ {
cout << '1' << endl; cout << '1' << endl;
...@@ -303,7 +394,7 @@ int main() ...@@ -303,7 +394,7 @@ int main()
else else
{ {
for (int m = 1; m <= 2 * n - 1; m++) for (int m = 1; m <= 2 * n - 1; m++)
{ {
cout << str[n + (m - 2)]; cout << str[n + (m - 2)];
} }
} }
......
...@@ -52,20 +52,48 @@ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X ...@@ -52,20 +52,48 @@ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
请你推算出:读数最大的电子秤的示数为多少? 请你推算出:读数最大的电子秤的示数为多少?
## aop 以下的代码可以计算出点子称的示数,请你补全它:
### before
```cpp ```cpp
#include <stdio.h> #include <bits/stdc++.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std; using namespace std;
typedef long long ll; typedef long long ll;
const ll maxn = 1e6 + 50; const ll maxn = 1e6 + 50;
double a[1050][1050]; double a[1050][1050];
int main()
{
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
scanf("%lf", &a[i][j]);
}
}
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
a[i + 1][j] += (0.5 * a[i][j]);
__________________
}
}
double minn = 1000000000, maxx = -1;
for (ll i = 1; i <= 30; i++)
{
maxx = max(maxx, a[30][i]);
minn = min(minn, a[30][i]);
}
printf("%lf\n", maxx * 2086458231 / minn);
}
```
## aop
### before
```cpp
``` ```
### after ### after
...@@ -76,32 +104,7 @@ double a[1050][1050]; ...@@ -76,32 +104,7 @@ double a[1050][1050];
## 答案 ## 答案
```cpp ```cpp
int main() a[i + 1][j + 1] += (0.5 * a[i][j]);
{
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
scanf("%lf", &a[i][j]);
}
}
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
a[i + 1][j] += (0.5 * a[i][j]);
a[i + 1][j + 1] += (0.5 * a[i][j]);
}
}
double minn = 1000000000, maxx = -1;
for (ll i = 1; i <= 30; i++)
{
maxx = max(maxx, a[30][i]);
minn = min(minn, a[30][i]);
printf("%lf\n", a[30][i]);
}
printf("%lf\n", maxx * 2086458231 / minn);
}
``` ```
## 选项 ## 选项
...@@ -109,94 +112,17 @@ int main() ...@@ -109,94 +112,17 @@ int main()
### A ### A
```cpp ```cpp
a[i + 1][j] += (0.5 * a[i][j]);
int main()
{
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
scanf("%lf", &a[i][j]);
}
}
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
a[i + 1][j] += (0.5 * a[i][j]);
a[i + 1][j + 1] += (0.5 * a[i][j]);
}
}
double minn = 1000000000, maxx = -1;
for (ll i = 1; i <= 29; i++)
{
maxx = max(maxx, a[30][i]);
minn = min(minn, a[30][i]);
printf("%lf\n", a[30][i]);
}
printf("%lf\n", maxx * 2086458231 / minn);
}
``` ```
### B ### B
```cpp ```cpp
int main() a[i][j + 1] += (0.5 * a[i][j]);
{
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
scanf("%lf", &a[i][j]);
}
}
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
a[i + 1][j] = (0.5 * a[i][j]);
a[i + 1][j + 1] = (0.5 * a[i][j]);
}
}
double minn = 1000000000, maxx = -1;
for (ll i = 1; i <= 29; i++)
{
maxx = max(maxx, a[30][i]);
minn = min(minn, a[30][i]);
printf("%lf\n", a[30][i]);
}
printf("%lf\n", maxx * 2086458231 / minn);
}
``` ```
### C ### C
```cpp ```cpp
int main() a[i + 1][j + 1] = (0.5 * a[i][j]);
{
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
scanf("%lf", &a[i][j]);
}
}
for (ll i = 1; i <= 29; i++)
{
for (ll j = 1; j <= i; j++)
{
a[i + 1][j] += (0.5 * a[i][j]);
a[i][j + 1] += (0.5 * a[i][j]);
}
}
double minn = 1000000000, maxx = -1;
for (ll i = 1; i <= 30; i++)
{
maxx = max(maxx, a[30][i]);
minn = min(minn, a[30][i]);
printf("%lf\n", a[30][i]);
}
printf("%lf\n", maxx * 2086458231 / minn);
}
``` ```
...@@ -39,52 +39,57 @@ ...@@ -39,52 +39,57 @@
### before ### before
```cpp ```cpp
#include <stdio.h> #include <bits/stdc++.h>
#include <string.h> using namespace std;
int co[100100][2];
int coun(int n, int x)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += (co[i][0] / x) * (co[i][1] / x);
}
return sum;
}
``` ```
### after ### after
```cpp ```cpp
int main()
{
int n;
int k;
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++)
scanf("%d%d", &co[i][0], &co[i][1]);
printf("%d\n", binary(n, k));
}
``` ```
## 答案 ## 答案
```cpp ```cpp
int binary(int n, int k) bool cmp(pair<int, int> a, pair<int, int> b)
{ {
int l = 0, r = 100000; return a.first > b.first;
while (l < r) }
int main()
{
int n, k;
vector<pair<int, int>> vec;
cin >> n >> k;
for (int i = 0; i < n; i++)
{ {
int mid = (r - l) / 2 + l; int h, w;
if (coun(n, mid) < k) cin >> h >> w;
r = mid - 1; if (h > w)
else if (coun(n, mid) > k) {
l = mid + 1; int temp = h;
else h = w;
return mid; w = temp;
}
vec.push_back(pair<int, int>(h, w));
} }
return r; sort(vec.begin(), vec.end(), cmp);
int s = vec[0].first;
while (s)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
int h = vec[i].first;
int w = vec[i].second;
if (s > h || s > w)
break;
sum += (h / s) * (w / s);
}
if (sum >= k)
s--;
}
cout << s;
return 0;
} }
``` ```
## 选项 ## 选项
...@@ -93,59 +98,127 @@ int binary(int n, int k) ...@@ -93,59 +98,127 @@ int binary(int n, int k)
### A ### A
```cpp ```cpp
int binary(int n, int k) int main()
{ {
int l = 0, r = 100000; int n, k;
while (l < r) int h[100000];
int w[100000];
cin >> n >> k;
for (int i = 0; i < n; i++)
{ {
int mid = (r - l) / 2 + l; cin >> h[i] >> w[i];
if (coun(n, mid) < k)
r = mid;
else if (coun(n, mid) > k)
l = mid;
else
return mid;
} }
return r; int len = 100000;
for (; len >= 1; len--)
{
int cnt = 0;
for (int i = 0; i < n; i++)
{
cnt += (h[i] / len) * (w[i] / len);
}
if (cnt >= k)
{
cout << len << endl;
return 0;
}
}
return 0;
} }
``` ```
### B ### B
```cpp ```cpp
int binary(int n, int k) typedef struct
{ {
int l = 0, r = 100000; int h, w;
while (l < r) } node;
const int maxn = 1e5 + 7;
node a[maxn];
int n, k, mx = -1;
bool check(int x)
{
int cnt = 0;
for (int i = 0; i < n; i++)
{ {
int mid = (r - l) / 2 + l; cnt += (a[i].h / x) * (a[i].w / x);
if (coun(n, mid) > k) }
r = mid; if (cnt >= k)
else if (coun(n, mid) < k) return true;
l = mid; else
return false;
}
int main()
{
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++)
{
scanf("%d%d", &a[i].h, &a[i].w);
if (a[i].w > mx)
mx = a[i].w;
if (a[i].h > mx)
mx = a[i].h;
}
int l = 1, r = mx, ans;
while (l <= r)
{
int mid = (l + r) / 2;
if (check(mid))
{
ans = mid;
l = mid + 1;
}
else else
return mid; {
r = mid - 1;
}
} }
return r; printf("%d\n", ans);
return 0;
} }
``` ```
### C ### C
```cpp ```cpp
int co[100100][2];
int coun(int n, int x)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += (co[i][0] / x) * (co[i][1] / x);
}
return sum;
}
int binary(int n, int k) int binary(int n, int k)
{ {
int l = 0, r = 100000; int l = 0, r = 100000;
while (l < r) while (l < r)
{ {
int mid = (r - l) / 2 + l; int mid = (r - l) / 2 + l;
if (coun(n, mid) > k) if (coun(n, mid) < k)
r = mid - 1; r = mid - 1;
else if (coun(n, mid) < k) else if (coun(n, mid) > k)
l = mid + 1; l = mid + 1;
else else
return mid; return mid;
} }
return r; return r;
} }
int main()
{
int n;
int k;
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++)
scanf("%d%d", &co[i][0], &co[i][1]);
printf("%d\n", binary(n, k));
}
``` ```
...@@ -11,13 +11,14 @@ ...@@ -11,13 +11,14 @@
请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少? 请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?
下面的哪一项是错误的?
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
using namespace std; using namespace std;
``` ```
### after ### after
...@@ -31,15 +32,15 @@ using namespace std; ...@@ -31,15 +32,15 @@ using namespace std;
```cpp ```cpp
int main() int main()
{ {
int num1[7] = {0, 1, 2, 5, 6, 8, 9}; int num1[7] = {0, 1, 2, 5, 6, 8, 9};
int num2[7] = {0, 1, 2, 5, 9, 8, 6}; int num2[7] = {0, 1, 2, 5, 9, 8, 6};
int profit1[1111][2]; int profit1[1111][2];
int profit2[1111][2]; int profit2[1111][2];
int before_reverse; int before_reverse;
int after_reverse; int after_reverse;
int i = 0; int i = 0;
int j = 0; int j = 0;
for (int a = 1; a < 7; a++) for (int a = 1; a < 7; a++)
{ {
for (int b = 0; b < 7; b++) for (int b = 0; b < 7; b++)
{ {
...@@ -49,19 +50,19 @@ int main() ...@@ -49,19 +50,19 @@ int main()
{ {
before_reverse = num1[a] * 1000 + num1[b] * 100 + num1[c] * 10 + num1[d]; before_reverse = num1[a] * 1000 + num1[b] * 100 + num1[c] * 10 + num1[d];
after_reverse = num2[d] * 1000 + num2[c] * 100 + num2[b] * 10 + num2[a]; after_reverse = num2[d] * 1000 + num2[c] * 100 + num2[b] * 10 + num2[a];
if (after_reverse - before_reverse > -300 && after_reverse - before_reverse < -200) if (after_reverse - before_reverse > -300 && after_reverse - before_reverse < -200)
{ {
profit1[i][0] = before_reverse; profit1[i][0] = before_reverse;
profit1[i][1] = after_reverse - before_reverse; profit1[i][1] = after_reverse - before_reverse;
i++; i++;
} }
else if (after_reverse - before_reverse > 800 && after_reverse - before_reverse < 900) else if (after_reverse - before_reverse > 800 && after_reverse - before_reverse < 900)
{ {
profit1[j][0] = before_reverse; profit1[j][0] = after_reverse - before_reverse;
profit2[j][1] = after_reverse - before_reverse; profit2[j][1] = before_reverse;
j++; j++;
} }
} }
...@@ -89,57 +90,81 @@ int main() ...@@ -89,57 +90,81 @@ int main()
### A ### A
```cpp ```cpp
int main() void i2s(int num, string &str)
{ {
int num1[7] = {0, 1, 2, 5, 6, 8, 9}; stringstream ss;
int num2[7] = {0, 1, 2, 5, 9, 8, 6}; ss << num;
int profit1[1111][2]; ss >> str;
int profit2[1111][2]; }
int before_reverse;
int after_reverse; void s2i(string &str, int &num)
int i = 0; {
int j = 0; stringstream ss;
for (int a = 1; a < 7; a++) ss << str;
ss >> num;
}
char to(char x)
{
if (x == '6')
return '9';
else if (x == '9')
return '6';
else
return x;
}
string reserve(const string &str)
{
string ans;
for (int i = 3; i >= 0; i--)
{ {
for (int b = 0; b < 7; b++) ans.insert(ans.end(), to(str[i]));
{
for (int c = 0; c < 7; c++)
{
for (int d = 0; d < 7; d++)
{
before_reverse = num1[a] * 1000 + num1[b] * 100 + num1[c] * 10 + num1[d];
after_reverse = num2[d] * 1000 + num2[c] * 100 + num2[b] * 10 + num2[a];
if (after_reverse - before_reverse > -300 && after_reverse - before_reverse < -200)
{
profit1[i][0] = before_reverse;
profit1[i][1] = after_reverse - before_reverse;
i++;
}
else if (after_reverse - before_reverse > 800 && after_reverse - before_reverse < 900)
{
profit1[j][0] = before_reverse;
profit2[j][1] = after_reverse - before_reverse;
j++;
}
}
}
}
} }
return ans;
}
struct price
{
int a, b, c;
};
vector<price> v1;
vector<price> v2;
int main()
{
int answer = 0; int answer = 0;
for (int a = 0; a < i; a++) for (int i = 1000; i < 10000; i++)
{ {
for (int b = 0; b < j; b++) string str;
i2s(i, str);
if (str.find('3') != string::npos || str.find('4') != string::npos || str.find('7') != string::npos || str.rfind('0') == 3)
continue;
string r = reserve(str);
int r_int;
s2i(r, r_int);
int plus = r_int - i;
if (plus > -300 && plus < -200)
{ {
if (profit1[a][1] + profit2[b][1] == 558) price p = {i, r_int, plus};
v1.push_back(p);
}
else if (plus > 800 && plus < 900)
{
price p = {i, r_int, plus};
v2.push_back(p);
}
for (int i = 0; i < v1.size(); i++)
{
for (int j = 0; j < v2.size(); j++)
{ {
answer = profit1[b][1]; if (v1[i].c + v2[j].c == 558)
{
answer = v1[i].a;
}
} }
} }
} }
cout << answer << endl; cout << answer;
return 0; return 0;
} }
``` ```
...@@ -147,57 +172,56 @@ int main() ...@@ -147,57 +172,56 @@ int main()
### B ### B
```cpp ```cpp
#define ll long long
using namespace std;
int flag(int n)
{
if (n % 10 == 0)
return 0;
while (n > 0)
{
int t = n % 10;
if (t == 3 || t == 4 || t == 7)
return 0;
n /= 10;
}
return 1;
}
int reverse(int n)
{
int ans = 0;
while (n > 0)
{
int t = n % 10;
if (t == 6)
t = 9;
else if (t == 9)
t = 6;
ans = ans * 10 + t;
n /= 10;
}
return ans;
}
int main() int main()
{ {
int num1[7] = {0, 1, 2, 5, 6, 8, 9}; int ans1, ans2;
int num2[7] = {0, 1, 2, 5, 9, 8, 6}; for (int i = 1000; i <= 10000; i++)
int profit1[1111][2];
int profit2[1111][2];
int before_reverse;
int after_reverse;
int i = 0;
int j = 0;
for (int a = 1; a < 7; a++)
{ {
for (int b = 0; b < 7; b++) for (int j = 1000; j <= 10000; j++)
{ {
for (int c = 0; c < 7; c++) if (flag(i) && flag(j))
{ {
for (int d = 0; d < 7; d++) int t1 = i - reverse(i);
int t2 = j - reverse(j);
if (t1 > 200 && t1 < 300 && t2 < -800 && t2 > -900 && t2 + t1 == -558)
{ {
before_reverse = num1[a] * 1000 + num1[b] * 100 + num1[c] * 10 + num1[d]; ans1 = i, ans2 = j;
after_reverse = num2[d] * 1000 + num2[c] * 100 + num2[b] * 10 + num2[a]; cout << ans1 << endl;
break;
if (after_reverse - before_reverse > -300 && after_reverse - before_reverse < -200)
{
profit1[i][0] = before_reverse;
profit1[i][1] = after_reverse - before_reverse;
i++;
}
else if (after_reverse - before_reverse > 800 && after_reverse - before_reverse < 900)
{
profit1[j][0] = before_reverse;
profit2[j][1] = after_reverse - before_reverse;
j++;
}
} }
} }
} }
} }
int answer = 0;
for (int a = 0; a < i; a++)
{
for (int b = 0; b < j; b++)
{
if (profit1[a][1] + profit2[b][1] == 558)
{
answer = profit1[b][0];
}
}
}
cout << answer << endl;
return 0; return 0;
} }
``` ```
...@@ -205,57 +229,44 @@ int main() ...@@ -205,57 +229,44 @@ int main()
### C ### C
```cpp ```cpp
int num[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int dnum[] = {0, 1, 2, -1, -1, 5, 9, -1, 8, 6};
int main() int main()
{ {
int num1[7] = {0, 1, 2, 5, 6, 8, 9}; int a[10], b[10];
int num2[7] = {0, 1, 2, 5, 9, 8, 6}; int answer = 0;
int profit1[1111][2]; for (a[1] = 1; a[1] <= 9; ++a[1])
int profit2[1111][2]; for (a[2] = 0; a[2] <= 9; ++a[2])
int before_reverse; for (a[3] = 0; a[3] <= 9; ++a[3])
int after_reverse; for (a[4] = 1; a[4] <= 9; ++a[4])
int i = 0;
int j = 0;
for (int a = 1; a < 7; a++)
{
for (int b = 0; b < 7; b++)
{
for (int c = 0; c < 7; c++)
{
for (int d = 0; d < 7; d++)
{ {
before_reverse = num1[a] * 1000 + num1[b] * 100 + num1[c] * 10 + num1[d]; if (dnum[a[1]] >= 0 && dnum[a[2]] >= 0 && dnum[a[3]] >= 0 && dnum[a[3]] >= 0)
after_reverse = num2[d] * 1000 + num2[c] * 100 + num2[b] * 10 + num2[a];
if (after_reverse - before_reverse > -300 && after_reverse - before_reverse < -200)
{ {
profit1[i][0] = before_reverse; int x = a[1] * 1000 + a[2] * 100 + a[3] * 10 + a[4];
profit1[i][1] = after_reverse - before_reverse; int y = dnum[a[4]] * 1000 + dnum[a[3]] * 100 + dnum[a[2]] * 10 + dnum[a[1]];
i++; if (x - y >= 200 && x - y <= 300)
} {
else if (after_reverse - before_reverse > 800 && after_reverse - before_reverse < 900) for (b[1] = 1; b[1] <= 9; ++b[1])
for (b[2] = 0; b[2] <= 9; ++b[2])
{ for (b[3] = 0; b[3] <= 9; ++b[3])
profit1[j][0] = before_reverse; for (b[4] = 1; b[4] <= 9; ++b[4])
profit2[j][1] = after_reverse - before_reverse; {
j++; if (dnum[b[1]] >= 0 && dnum[b[2]] >= 0 && dnum[b[3]] >= 0 && dnum[b[3]] >= 0)
{
int i = b[1] * 1000 + b[2] * 100 + b[3] * 10 + b[4];
int j = dnum[b[4]] * 1000 + dnum[b[3]] * 100 + dnum[b[2]] * 10 + dnum[b[1]];
if (j - i >= 800 && j - i <= 900)
{
if (j - i + y - x == 558)
answer = x;
}
}
}
}
} }
} }
} cout << answer;
}
}
int answer = 0;
for (int a = 0; a < i; a++)
{
for (int b = 0; b < j; b++)
{
if (profit1[a][1] + profit2[b][1] == 558)
{
answer = profit1[0][b];
}
}
}
cout << answer << endl;
return 0; return 0;
} }
``` ```
...@@ -19,35 +19,21 @@ ...@@ -19,35 +19,21 @@
**样例输入** **样例输入**
``` ```
4
1000 1000
``` ```
**样例输出** **样例输出**
``` ```
No Solution
6 8 30 6 8 30
10 18 24 10 18 24
``` ```
## aop 以下程序可以实现该功能,请你计算该程序的算法复杂度:
### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
#include <cmath>
using namespace std; using namespace std;
```
### after
```cpp
```
## 答案
```cpp
int main() int main()
{ {
int n; int n;
...@@ -77,7 +63,25 @@ int main() ...@@ -77,7 +63,25 @@ int main()
return 0; return 0;
} }
```
## aop
### before
```cpp
```
### after
```cpp
```
## 答案
```cpp
O(n^1.5)
``` ```
## 选项 ## 选项
...@@ -85,101 +89,17 @@ int main() ...@@ -85,101 +89,17 @@ int main()
### A ### A
```cpp ```cpp
int main() O(n^3)
{
int n;
bool flag = false;
while (cin >> n)
{
flag = false;
for (int i = 1; i <= n; i++)
{
for (int j = i; j <= n; j++)
{
for (int k = j; k <= n; k++)
{
if (i * i + j * j + k * k == n)
{
cout << i << ' ' << j << ' ' << k << endl;
flag = true;
}
else if (i * i + j * j + k * k > n)
break;
}
}
}
if (!flag)
cout << "No Solution" << endl;
}
return 0;
}
``` ```
### B ### B
```cpp ```cpp
int main() O(n^2)
{
int n;
bool flag = false;
while (cin >> n)
{
flag = false;
for (int i = 1; i < sqrt(n); i++)
{
for (int j = 1; j < sqrt(n); j++)
{
for (int k = 1; k < sqrt(n); k++)
{
if (i * i + j * j + k * k == n)
{
cout << i << ' ' << j << ' ' << k << endl;
flag = true;
}
else if (i * i + j * j + k * k > n)
break;
}
}
}
if (!flag)
cout << "No Solution" << endl;
}
return 0;
}
``` ```
### C ### C
```cpp ```cpp
int main() O(n^2.5)
{
int n;
bool flag = false;
while (cin >> n)
{
flag = false;
for (int i = 1; i <= sqrt(n); i++)
{
for (int j = 1; j <= sqrt(n); j++)
{
for (int k = j; k <= sqrt(n); k++)
{
if (i * i + j * j + k * k == n)
{
cout << i << ' ' << j << ' ' << k << endl;
flag = true;
}
else if (i * i + j * j + k * k > n)
break;
}
}
}
if (!flag)
cout << "No Solution" << endl;
}
return 0;
}
``` ```
...@@ -25,89 +25,18 @@ ...@@ -25,89 +25,18 @@
### before ### before
```cpp ```cpp
#include <iostream>
using namespace std;
int use[10];
int ans, e[10][10], father[10];
void init()
{
e[1][2] = e[1][6] = 1;
e[2][1] = e[2][7] = e[2][3] = 1;
e[3][2] = e[3][4] = e[3][7] = 1;
e[4][3] = e[4][5] = 1;
e[5][4] = e[5][6] = e[5][7] = 1;
e[6][1] = e[6][5] = e[6][7] = 1;
}
int find(int a)
{
if (father[a] == a)
return a;
father[a] = find(father[a]);
return father[a];
}
``` ```
### after ### after
```cpp ```cpp
int main()
{
init();
dfs(1);
cout << ans;
return 0;
}
``` ```
## 答案 ## 答案
```cpp ```cpp
void dfs(int d) 80
{
if (d > 7)
{
for (int i = 1; i <= 7; i++)
{
father[i] = i;
}
for (int i = 1; i < 8; i++)
{
for (int j = 1; j < 8; j++)
{
if (e[i][j] == 1 && use[i] && use[j])
{
int fx = find(i);
int fy = find(j);
if (fx != fy)
{
father[fx] = fy;
}
}
}
}
int k = 0;
for (int i = 1; i < 8; i++)
{
if (use[i] && father[i] == i)
{
k++;
}
}
if (k == 1)
{
ans++;
}
return;
}
use[d] = 1;
dfs(d + 1);
use[d] = 0;
dfs(d + 1);
}
``` ```
## 选项 ## 选项
...@@ -115,131 +44,17 @@ void dfs(int d) ...@@ -115,131 +44,17 @@ void dfs(int d)
### A ### A
```cpp ```cpp
void dfs(int d) 90
{
if (d > 7)
{
for (int i = 1; i <= 7; i++)
{
father[i] = i;
}
for (int i = 1; i < 8; i++)
{
for (int j = 1; j < 8; j++)
{
if (e[i][j] == 1 && use[i] && use[j])
{
int fx = find(i);
int fy = find(j);
if (fx != fy)
{
father[fx] = fy;
}
}
}
}
int k = 0;
for (int i = 1; i < 8; i++)
{
if (father[i] == i)
{
k++;
}
}
if (k == 1)
{
ans++;
}
return;
}
use[d] = 1;
dfs(d + 1);
use[d] = 0;
dfs(d + 1);
}
``` ```
### B ### B
```cpp ```cpp
void dfs(int d) 70
{
if (d > 7)
{
for (int i = 1; i <= 7; i++)
{
father[i] = i;
}
for (int i = 1; i < 8; i++)
{
for (int j = 1; j < 8; j++)
{
if (e[i][j] == 1)
{
int fx = find(i);
int fy = find(j);
if (fx != fy)
{
father[fx] = fy;
}
}
}
}
int k = 0;
for (int i = 1; i < 8; i++)
{
if (use[i] && father[i] == i)
{
k++;
}
}
if (k == 1)
{
ans++;
}
return;
}
use[d] = 1;
dfs(d + 1);
use[d] = 0;
dfs(d + 1);
}
``` ```
### C ### C
```cpp ```cpp
void dfs(int d) 78
{
if (d > 7)
{
for (int i = 1; i <= 7; i++)
{
father[i] = i;
}
int k = 0;
for (int i = 1; i < 8; i++)
{
if (use[i] && father[i] == i)
{
k++;
}
}
if (k == 1)
{
ans++;
}
return;
}
use[d] = 1;
dfs(d + 1);
use[d] = 0;
dfs(d + 1);
}
``` ```
...@@ -29,12 +29,14 @@ ...@@ -29,12 +29,14 @@
4 4
``` ```
以下错误的一项是?
## aop ## aop
### before ### before
```cpp ```cpp
#include <iostream> #include <bits/stdc++.h>
using namespace std; using namespace std;
``` ```
### after ### after
...@@ -50,42 +52,35 @@ int main() ...@@ -50,42 +52,35 @@ int main()
{ {
int n; int n;
cin >> n; cin >> n;
int *Candy = new int[n]; int a[n], tmp[n];
for (int i = 0; i < n; i++) for (int i = 0; i < n; ++i)
{ cin >> a[i];
cin >> Candy[i]; int cnt = 0, t;
} bool f = true;
int total = 0; while (true)
while (1)
{ {
bool flag = true; f = true;
for (int i = 1; i < n; i++) for (int i = 1; i < n; ++i)
{ if (a[0] != a[i])
if (Candy[0] != Candy[i])
{ {
flag = false; f = false;
break; break;
} }
} if (f)
if (flag == true)
break; break;
int temp = Candy[n - 1];
for (int i = n - 1; i >= 0; i--) for (int i = 0; i < n; ++i)
a[i] = tmp[i] = a[i] >> 1;
for (int i = 0; i < n; ++i)
{ {
if (i == 0) t = (i - 1 + n) % n;
{ a[t] += tmp[i];
Candy[0] = Candy[0] / 2 + temp / 2; if (a[t] && 1)
} ++a[t], ++cnt;
else
Candy[i] = Candy[i] / 2 + Candy[i - 1] / 2;
if (Candy[i] % 2 != 0)
{
Candy[i] += 1;
total += 1;
}
} }
} }
cout << total << endl; cout << cnt;
return 0;
} }
``` ```
## 选项 ## 选项
...@@ -96,90 +91,104 @@ int main() ...@@ -96,90 +91,104 @@ int main()
```cpp ```cpp
int main() int main()
{ {
int n; int n, m, count = 0, t = 0;
cin >> n; cin >> n;
int *Candy = new int[n]; vector<int> v;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
cin >> Candy[i]; cin >> m;
v.push_back(m);
} }
int total = 0;
while (1) while (1)
{ {
bool flag = true; bool flag = true;
for (int i = 1; i < n; i++) for (int i = 0; i < n; i++)
{ {
if (Candy[0] != Candy[i]) if (v[0] != v[i])
{
flag = false; flag = false;
break;
}
} }
if (flag == true) if (flag)
break; break;
int temp = Candy[n - 1]; for (int i = 0; i < n; i++)
for (int i = n; i >= 0; i--)
{ {
if (i == 0) v[i] = v[i] / 2;
{ }
Candy[0] = Candy[0] / 2 + temp / 2; int temp = v[n - 1];
} for (int i = n - 1; i > 0; i--)
else {
Candy[i] = Candy[i] / 2 + Candy[i - 1] / 2; v[i] += v[i - 1];
if (Candy[i] % 2 != 0) }
v[0] += temp;
for (int i = 0; i < n; i++)
{
if (v[i] & 1)
{ {
Candy[i] += 1; v[i]++;
total += 1; count++;
} }
} }
} }
cout << total << endl; cout << count << endl;
return 0;
} }
``` ```
### B ### B
```cpp ```cpp
int n;
int a[100];
int main() int main()
{ {
int n; bool flag;
cin >> n; cin >> n;
int *Candy = new int[n]; for (int i = 1; i <= n; i++)
for (int i = 0; i < n; i++)
{ {
cin >> Candy[i]; cin >> a[i];
} }
int total = 0; int nAns = 0;
while (1) int temp;
while (true)
{ {
bool flag = true; for (int i = 1; i <= n; i++)
for (int i = 1; i < n; i++)
{ {
if (Candy[0] != Candy[i]) if (1 == i)
{ {
flag = false; temp = a[i] / 2;
break; a[i] -= temp;
}
else
{
a[i - 1] += a[i] / 2;
a[i] -= a[i] / 2;
} }
} }
if (flag == true) a[n] += temp;
break; for (int i = 1; i <= n; i++)
int temp = Candy[n - 1];
for (int i = n; i >= 0; i--)
{ {
if (i == 0) if (a[i] % 2 == 1)
{ {
Candy[0] = Candy[0] / 2 + temp / 2; a[i] += 1;
nAns++;
} }
else }
Candy[i] = Candy[i] / 2 + Candy[i - 1] / 2; flag = true;
if (Candy[i] % 2 == 0) for (int i = 1; i < n; i++)
{
if (a[i] != a[i + 1])
{ {
Candy[i] += 1; flag = false;
total += 1;
} }
} }
if (flag == true)
{
break;
}
} }
cout << total << endl; cout << nAns << endl;
return 0;
} }
``` ```
...@@ -218,7 +227,7 @@ int main() ...@@ -218,7 +227,7 @@ int main()
} }
else else
Candy[i] = Candy[i] / 2 + Candy[i - 1] / 2; Candy[i] = Candy[i] / 2 + Candy[i - 1] / 2;
if (Candy[i] % 2 == 0) if (Candy[i] % 2 != 0)
{ {
Candy[i] += 1; Candy[i] += 1;
total += 1; total += 1;
...@@ -227,5 +236,4 @@ int main() ...@@ -227,5 +236,4 @@ int main()
} }
cout << total << endl; cout << total << endl;
} }
``` ```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册