1728: CSP-S21阅读程序

Memory Limit:128 MB Time Limit:1.000 S
Judge Style:Special Judger Creator:
Submit:2 Solved:0

Description

(1)
01 #include <iostream>
02 #include <cmath>
03 using namespace std;
04
05 const double r = acos(0.5);
06
07 int a1,b1,c1,d1;
88 int a2,b2,c2,d2;
09
10 inline int sq(const int x) { return x * x; }
11 inline int cu(const int x) { return x * x * x; }
12
13 int main()
14{
15     cout.flags(ios::fixed);
16     cout.preqion(4);
17
18     cin >> al >> b1 >> c1 >> d1;
19     cin >> a2 >> b2 >> c2 >> d2;
20
21     int t = sq(a1-a2) + sq(b1-b2) + sq(c1-c2);
22
23     if (t <= sq(d2-d1)) cout << cu(min(d1,d2))*r*4;
24     else if (t >= sq(d2+d1)) cout << 0;
25     else{
26         double x = d1 - (sq(d1) - sq(d2) + t) / sqrt(t) / 2;
27         double y = d2 - (sq(d2) - sq(d1) + t) / sqrt(t) / 2;
28         cout << (x*x*(3*d1-x)+y*y*(3*d2-y))*r;
29     }
30     cout << endl;
31     return 0;
32 }

假设输入的所有数的纯对值都不超过1000,完成下面的判断题和单选愿:

判断题

1. 将第21行中t的类型声明从 int 改为 double,不会影响程序运行的结果。()
A. 正确
B. 错误

2. 将第26、27行中的“/ sqrt(t)/ 2” 替换为“/ 2 / sqrt(t)”,不会影啊程序运行的结果。()
A. 正确
B. 错误

3. 将第28行中的“x*x”改成“sq(x)”、“y*y”改成“sq(y)”,不会影啊程序运行的结果。()
A. 正确
B. 错误

4. 当输入为 “00011001”时,输出为 “1.3090”。(2分)
A. 正确
B. 错误

单选题

5. 当输入为“11111112”时,输出为()。
A. “3.1416”
B. “6.2832”
C. “4.7124”
D. “4.1888”

6. 这段代码的含义为()。(2.5分)
A.求圆的面积并
B.求球的体积并
C.求球的体积交
D.求椭球的体积并

(2)
01 #include <algorithm>
02 #include <iostream>
03 using namespace std;
04
05 int n,a[1005];
06
07 struct Node
08{
09     int h,j,m,w;
10
11     Node(const inth,const int Jj,const int m,const int _w):
12       h(_h),j(_j),m(_m),w(_w)
13     {}
14
15     Node operator+(const Node &o) const
16     {
17         return Node(
18             max(h,w+o.h),
19             max(max(j,o.j),m+o.h),
20             max(m+o.W,o.m),
21             W +O.w);
22     }
23};
24
25 Node solve1(int h,intm)
26{
27     if(h>m)
28         return Node(-1,-1,-1,-1);
29     if(h==m)
30         return Node(max(a[h],0),max(a[h],0),max(a[h],0),a[h]);
31     int j=(h+m)>>1;
32     return solvel(h,j)+solve1(j+1,m);
33 }
34
35 int solve2(int h,int m)
36 {
37     if(h>m)
38         return -1;
39     if (h==m)
40         return max(a[h],0);
41     int j=(h+m)>>1;
42     int wh = 0,wm = 0;
43     int wht = 0,wmt = 0;
44     for (int i=j;i >= h;i--){
45         wht += a[i];
46         wh = max(wh,wht);
47     }
48     for (int i=j+1;i<=m;i++){
49         wmt += a[i];
50         wm = max(wm,wmt);
51     }
52     return max(max(solve2(h,j),solve2(j+1,m)),wh + wm);
53 }
54
55 int main()
56 {
57     cin >>n;
58     for (int i=1;i<=n;i++) cin>>a[i];
59     cout << solve1(1,n).j << endl;
60     cout << solve2(1,n) << endl;
61     return 0;
62 }

假设输入的所有数的绝对都不超过1000,完成下面的判断题和单选题:

判断題

7. 程序总是会正常执行并输出两行两个相等的数。()
A. 正确
B. 错误

8. 第28行与第38行分别有可能执行两次及以上。()
A. 正确
B. 错误

9. 当输入为“5 -10 11 -9 5 -7”时,输出的第二行为“7”.()
A. 正确
B. 错误

单选题

10.solve1(1,n)的时间复杂度为()。
A. O(logn)
B. O(n)
C. O(nlogn)
D. O(n^2)

11.solve2(1,n)的时间复杂度为()。
A. O(logn)
B. O(n)
C. O(nlogn)
D. O(n^2)

12.当输入为“10 -3 2 10 0 -8 9 -4 -5 9 4"时,输出的第一行为()
A. “13”
B. “17"
C. “24"
D. "12"

(3)
01 #include <iostream>
02 #include <string>
03 using namespace std;
04
05 char base[64];
66 char table[256];
07
08 void init()
09 {
10     for (int i=0; i < 26; i++) base[i] = 'A' +i;
11     for (int i=0; i < 26; i++) base[26 + i] = 'a' +i;
12     for (int i=0; i < 10; i++) base[52 + i] = '0' +i;
13     base[62] = '+', base[63] = '/';
14
15     for (int i=0; i < 256; i++) tableli] = Oxff;
16     for (int i=0; i < 64; i++) table[base[i]] = i;
17     table['=']=0;
18 }
19
20 string encode(string str)
21 {
22     string ret;
23     int i;
24     for (i= 0; i+3 <= str.size(); i += 3){
25         ret += base[str[i] >> 2];
26         ret += base[(str[i] & 0x03) << 4 | str[i+1] >> 4];
27         ret += base[(str[i + 1] & 0x0f) << 2 | str[i +2] >> 6];
28         ret += base[str[i + 2] & 0x3f];
29     }
30     if (i < str.size()){
31         ret += base[str[i]>>2];
32         if (i+1 == str.size()){
33             ret += base[(str[i] & 0x03) << 4];
34             ret += "==";
35         }
36         else{
37             ret += base[(str[i] & 0x03) << 4 | str[i+1] >> 4];
38             ret += base[(str[i+1] & 0x0f) << 2];
39             ret += "=";
40         }
41     }
42     return ret;
43 }
44
45 string decode(string str)
46 {
47     string ret;
48     int i;
49     for (i = 0; i < str.size(); i+=4) {
50         ret += table[str[i]] << 2 | table[str[i+1]] >> 4;
51         if(str[i + 2] != '=')
52             ret += (table[str[i + 1]] & 0x0f) << 4 | table[str[i+2]] >> 2;
53         if(str[i + 3] != '=')
54             ret += table[str[i + 2]]<<6 | table[str[i + 3]];
55     }
56     return ret;
57 }
58
59 int main()
60 {
61     init();
62     cout << int(table[0]) << endl;
63
64     int opt;
65     string str;
66     cin >> opt >> str;
67     cout << (opt ? decode(str):encode(str)) << endl;
68     return 0;
69 }

假设输入总是合法的(一个整数和一个不含空白字符的字符串,用空格隔开),完成下面的判断题和单选题:

判断题

13. 程序总是先输出一行一个整数,再输出一行一个字符串。()
A. 正确
B. 错误

14. 对于任意不含空白字符的字符串str1,先执行程序输入“0 str1”,得到输出的第二行记为str2; 再执行程序输入 “1 str2”,输出的第二行必为str1。()
A. 正确
B. 错误

15. 当输入为 “1 SGVsbG93b3JsZA==” 时,输出的第二行为 “HelloWorld”。()
A. 正确
B. 错误

单选题

16. 设输入字符串长度为n, encode函数的时间复杂度为()。
A. O(sqrt(n))
B. O(n)
C. O(nlogn)
D. O(n^2)

17. 输出的第一行为()。
A. “0xff”
B. “255"
C. “OxFF”
D. “-1”

18.当输入为“0 CSP2021csp”时,输出的第二行为()。(4分)
A. “Q1NQMjAyMWNzcAv=”
B. “Q1NOMjAyMGNzcA==”
C. “Q1NOMjAyMGNzcAv=”
D. "Q1NOMjAyMWNzcA==”