课程目录展开/折叠
2024.12.29-Contest#39-每周六模拟比赛题目讲解
播放快捷键
播放/暂停:空格(或鼠标单击) 全屏:F(或鼠标双击) 退出全屏:Esc
快进10 / 30 / 60秒:方向键→ / Ctrl + 方向键→ / Shift + 方向键→
快退10 / 30 / 60秒:方向键← / Ctrl + 方向键← / Shift + 方向键←
本节课讲解配套PPT&板书:







































比赛题目参考源代码
源代码下载:2024.12.29-Contest#39参考源代码下载
1. C1153-有趣的跳跃-1
#include <bits/stdc++.h>
using namespace std;
int n;
int a[3005];
int b[3005];
int main()
{
cin >> n;
for (int i = 0; i < n; i ++)
cin >> a[i];
for (int i = 1; i < n; i ++)
{
b[i] = abs(a[i] - a[i - 1]);
}
sort(b + 1, b + n);
bool flag = true;
for (int i = 1; i < n; i ++)
{
if (b[i] != i)
{
flag = false;
break;
}
}
if (flag) cout << "Jolly";
else cout << "Not jolly";
return 0;
}
2. C1154-计算鞍点-1
#include <bits/stdc++.h>
using namespace std;
int a[105][105];
int mx[105], mn[105]; // mx每行最大的值,mn每列最小的值
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i ++)
{
mx[i] = INT_MIN;
for (int j = 1; j <= m; j ++)
{
cin >> a[i][j];
if (a[i][j] > mx[i]) mx[i] = a[i][j];
}
}
for (int j = 1; j <= m; j ++)
{
mn[j] = INT_MAX;
for (int i = 1; i <= n; i ++)
{
if (a[i][j] < mn[j]) mn[j] = a[i][j];
}
}
bool found = false;
for (int i = 1; i <= n; i ++)
{
for (int j = 1; j <= m; j ++)
{
if (a[i][j] == mx[i] && a[i][j] == mn[j])
{
cout << i << ' ' << j << ' ' << a[i][j] << endl;
found = true;
}
}
}
if (!found)
cout << "not found";
return 0;
}
3. C1155-IP网络-1
#include <bits/stdc++.h>
using namespace std;
unsigned int ips[1005];
void setBit(unsigned int &num, int pos)
{
num = num | (1 << pos);
}
unsigned int get_mask(int n)
{
// int mask[32];
unsigned int mask = 0;
for (int i = 31; i >= 0; i --)
{
int sum = 0;
for (int j = 0; j < n; j ++)
{
sum += (ips[j] >> i) & 0x1;
}
if (sum == 0 || sum == n) setBit(mask, i);
else break;
}
return mask;
}
void print_ip(unsigned int ip)
{
for (int i = 0; i < 4; i ++)
{
cout << ((ip & 0xff000000) >> 24);
if (i != 3) cout << ".";
ip <<= 8;
}
}
int main()
{
int n;
while (cin >> n)
{
for (int i = 0; i < n; i ++)
{
unsigned int b1, b2, b3, b4;
char dot;
cin >> b1 >> dot >> b2 >> dot >> b3 >> dot >> b4;
// cout << b1 << ' ' << b2 << ' ' << b3 << ' ' << b4 << endl;
unsigned int ip = (b1 << 24) | (b2 << 16) | (b3 << 8) | b4;
ips[i] = ip;
// cout << ip << endl;
}
unsigned int mask = get_mask(n);
print_ip(ips[0] & mask);
cout << endl;
print_ip(mask);
cout << endl;
}
return 0;
}
4. C1156-立方体上色-1
#include <bits/stdc++.h>
using namespace std;
string s, s1, s2;
void r_x()
{
// 1 2 6 5 => 2 6 5 1
char temp = s1[1];
s1[1] = s1[2];
s1[2] = s1[6];
s1[6] = s1[5];
s1[5] = temp;
// cout << s1 << endl;
}
void r_y()
{
// 2 4 5 3 = > 4 5 3 2
char temp = s1[2];
s1[2] = s1[4];
s1[4] = s1[5];
s1[5] = s1[3];
s1[3] = temp;
// cout << s1 << endl;
}
void r_z()
{
// 1 4 6 3 = > 4 6 3 1
char temp = s1[1];
s1[1] = s1[4];
s1[4] = s1[6];
s1[6] = s1[3];
s1[3] = temp;
// cout << s1 << endl;
}
int main()
{
// freopen("1.out", "w", stdout);
while (cin >> s)
{
s1 = s.substr(0, 6);
s2 = s.substr(6, 6);
s1 = " " + s1;
s2 = " " + s2;
// cout << s1 << ' ' << s2 << endl;
bool flag = false;
for (int x = 0; x < 4; x ++)
{
r_x();
if (s1 == s2)
{
flag = true;
goto A;
}
for (int y = 0; y < 4; y ++)
{
r_y();
if (s1 == s2)
{
flag = true;
goto A;
}
for (int z = 0; z < 4; z ++)
{
r_z();
if (s1 == s2)
{
flag = true;
goto A;
}
}
}
}
A:
if (flag) cout << "TRUE";
else cout << "FALSE";
cout << endl;
}
return 0;
}
本节课答疑
建议大家有问题先通过AI答疑(比如:DeepSeek 等),AI时代需要学会使用AI辅助学习
陈远龙老师视频讲解:如何使用DeepSeek进行答疑?
通过AI未能获得满意解答的,可以联系陈远龙老师答疑
目录