语法周赛 Round 24 题解
2024年12月25日大约 2 分钟
A. MB 还是 MiB?
分析
- 难度:根据字符判断单位即可。
- 子任务 1(30 分):确定了单位,输出的必然是
- 子任务 2(30 分):可以用两个字符输入单位,然后根据第一个字符来决定乘几个
。 - 子任务 3(40 分):
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long a, b;
char x, y;
cin >> a >> x >> y;
if (y == 'i')
b = 1024;
else
b = 1000;
if (x == 'K')
cout << a * b << "\n";
else if (x == 'M')
cout << a * b * b << "\n";
else if (x == 'G')
cout << a * b * b * b << "\n";
return 0;
}
B. 优化代码 2
分析
- 难度:
- 子任务 1(30 分):
- 子任务 2(30 分):
- 子任务 3(40 分):
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n;
cin >> n;
long long i, num;
for (i = 1;; i++)
{
// i*i+1 对应的 n
num = i * i + 1 - i;
if (num > n)
break;
}
i--;
num = i * i + 1 - i;
cout << i * i + 1 + (n - num);
return 0;
}
C. 比大小 Pro
分析
- 难度:
- 子任务 1(30 分):
- 子任务 2(30 分):
- 子任务 3(40 分):
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a, b;
cin >> a >> b;
bool neg = false;
if (a[0] == '-' && b[0] != '-')
{
cout << "second";
return 0;
}
if (a[0] != '-' && b[0] == '-')
{
cout << "first";
return 0;
}
if (a[0] == '-')
neg = true;
int aL = 0, bL = 0;
while (aL != (int)a.size() - 1 &&
(a[aL] == '-' || a[aL] == '0'))
aL++;
while (bL != (int)b.size() - 1 &&
(b[bL] == '-' || b[bL] == '0'))
bL++;
int ans = 0; // 正数时的大小关系
if ((int)a.size() - aL > (int)b.size() - bL)
ans = 1;
else if ((int)a.size() - aL < (int)b.size() - bL)
ans = 2;
else
{
for (int i = aL, j = bL; i < a.size(); i++, j++)
{
if (a[i] > b[j])
{
ans = 1;
break;
}
if (a[i] < b[j])
{
ans = 2;
break;
}
}
}
if (ans == 0)
cout << "same";
else if (ans == 1 && !neg ||
ans == 2 && neg)
cout << "first";
else
cout << "second";
return 0;
}
D. 按行排序按列排序
分析
- 难度:
- 子任务 1(30 分):
- 子任务 2(30 分):
- 子任务 3(40 分):
满分参考代码
#include <bits/stdc++.h>
using namespace std;
int n, op, pos, x, y;
int a[1005][1005];
int num[1005];
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> a[i][j];
for (int t = 1; t <= n; t++)
{
cin >> op >> x;
if (op == 1)
{
for (int i = 1; i <= n; i++)
num[i] = a[x][i];
sort(num + 1, num + n + 1);
for (int i = 1; i <= n; i++)
a[x][i] = num[i];
}
if (op == 2)
{
for (int i = 1; i <= n; i++)
num[i] = a[i][x];
sort(num + 1, num + n + 1);
for (int i = 1; i <= n; i++)
a[i][x] = num[i];
}
}
for (int t = 1; t <= n; t++)
{
cin >> x >> y;
cout << a[x][y] << "\n";
}
return 0;
}