QLU ACM-ICPC大学生程序设计迎新赛-热身赛【解题报告】

前言:

作为吃瓜群众围观两小时,见证了昌38s1A猜数题(太欧了吧),中途lzw登顶,柳总封榜前7秒AK等精彩刺激的环节,感觉2小时也并不漫长。

赛后和大家一起讨论了下题目,感觉都是可做的,预备队员最低要求为4题(D和F可能费点事),正式队员应该AK。

可能之前有没接触过猜答案的题目的,权当娱乐吧。

题解

说明

仅附代码,因为题面都是中文且思路都很明显。

题目序号

问题 A: 寻找欧皇

1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int main()
{
printf("7\n");
return 0;
}

问题 B: 人类的本质

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int n;
string s;
int main()
{
while(cin >> s >> n)
{
while(n--) cout << s << '\n';
}
return 0;
}

问题 C: 数的价值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

string s;
long long res;
int main()
{
while(cin >> s)
{
res = 1;
for(int i = 0; i < s.size(); ++i)
if(s[i] != '0')
res = res * (s[i] - '0');
if(s == "0")
res = 0;
cout << res << '\n';
}
return 0;
}

问题 D: 方格填充

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int t, x, y;
int res[7][7] =
{
{1, 1, 1, 2, 2, 2, 3},
{1, 2, 2, 2, 3, 4, 4},
{1, 2, 3, 4, 4, 5, 6},
{2, 2, 4, 4, 6, 6, 8},
{2, 3, 4, 6, 7, 8, 9},
{2, 4, 5, 6, 8, 10, 11},
{3, 4, 6, 8, 9, 11, 13},
};

int main()
{
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &x, &y);
printf("%d\n", res[x-1][y-1]);
}
return 0;
}

问题 E: 买铅笔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int n, num, price, res[3];
int main()
{
scanf("%d", &n);
for(int i = 0; i < 3; ++i)
{
scanf("%d%d", &num, &price);
int need = n / num + ((n % num) ? 1 : 0);
res[i] = need * price;
}
res[0] = min(res[0], res[1]);
res[0] = min(res[0], res[2]);
printf("%d\n", res[0]);
return 0;
}

问题 F: 图书管理员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 1010;

int n, t, x, q, a[N];
int len[] = {0,10,100,1000,10000,100000,1000000,10000000};
int main()
{
scanf("%d%d", &n,&q);
for(int i = 0; i < n; ++i)
scanf("%d", &a[i]);
sort(a, a + n);
while(q--)
{
bool flag = 0;
scanf("%d%d", &t, &x);
for(int i = 0; i < n; ++i)
{
if(a[i] % len[t] == x)
{
flag = 1;
printf("%d\n", a[i]);
break;
}
}
if(!flag)
puts("-1");
}
return 0;
}
Donate comment here
0%