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








































比赛题目参考源代码
源代码下载:2024.12.08-Contest#36参考源代码下载
1. 快速幂
#include <bits/stdc++.h>
using namespace std;
int myPow1(int a, int b)
{
int res = 1;
for (int i = 0; i < b; i ++)
{
res *= a;
}
return res;
}
int myPow2(int a, int b)
{
if (b == 1) return a;
// if (b == 0) return 1;
int res = myPow2(a, b / 2);
if (b % 2 == 1)
{
return a * res * res;
}
else
{
return res * res;
}
}
int main()
{
// a的b次方
// cout << myPow1(10, 1e9) << endl;
// cout << myPow2(10, 1e9) << endl;
cout << myPow2(2, 4) << endl;
return 0;
}
2. C1141-取模运算-1 - 不能AC
#include <bits/stdc++.h>
using namespace std;
int main()
{
int b, p, k;
cin >> b >> p >> k;
long long ans = (long long)pow(b, p) % k;
cout << ans;
return 0;
}
3. C1141-取模运算-2
#include <bits/stdc++.h>
using namespace std;
int b, p, k;
int myPow(int b, int p)
{
if (p == 1) return b % k;
// if (p == 0) return 1; // 也可以
int half = myPow(b, p / 2) % k;
if (p % 2)
return (half * half % k) * (b % k) % k;
else
return half * half % k;
}
int main()
{
cin >> b >> p >> k;
cout << myPow(b, p);
return 0;
}
4. C1142-程序员输入问题-1
#include <bits/stdc++.h>
using namespace std;
int main()
{
stack<char> s;
char ch;
while (cin.get(ch))
{
if (ch == '#')
{
if (!s.empty())
{
s.pop();
}
continue;
}
if (ch == '@')
{
while (!s.empty() && s.top() != '\n')
{
s.pop();
}
continue;
}
s.push(ch);
}
stack<char> ans;
while (!s.empty())
{
ans.push(s.top());
s.pop();
}
while (!ans.empty())
{
cout << ans.top();
ans.pop();
}
return 0;
}
5. C1143-铺瓷砖-1
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int a = 1;
for (int i = 2; i <= n; i ++)
{
if (i & 1)
a = (a * 2 - 1) % 12345;
else
a = (a * 2 + 1) % 12345;
}
cout << a;
return 0;
}
6. C1143-铺瓷砖-2
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int a = 1, b = 3;
if (n == 1)
{
cout << a;
return 0;
}
if (n == 2)
{
cout << b;
return 0;
}
int c;
for (int i = 3; i <= n; i ++)
{
c = (b + 2 * a) % 12345;
a = b;
b = c;
}
cout << c;
return 0;
}
7. C1144-城市交通-1
#include <bits/stdc++.h>
using namespace std;
int a[105][105];
int n;
int dp[105];
int main()
{
// memset(dp, 0x3f, sizeof(dp));
cin >> n;
for (int i = 1; i <= n; i ++)
{
for (int j = 1; j <= n; j ++)
cin >> a[i][j];
}
dp[1] = 0;
for (int i = 2; i <= n; i ++)
{
int mn = INT_MAX; // 代表最小值
for (int j = 1; j < i; j ++)
{
if (a[i][j])
{
// dp[i] = min(dp[i], dp[j] + a[i][j]);
mn = min(mn, dp[j] + a[i][j]);
}
}
dp[i] = mn;
}
cout << dp[n];
return 0;
}
8. C1144-城市交通-2
#include <bits/stdc++.h>
using namespace std;
int a[105][105];
int n;
int dp[105];
int main()
{
// memset(dp, 0x3f, sizeof(dp));
cin >> n;
for (int i = 1; i <= n; i ++)
{
for (int j = 1; j <= n; j ++)
cin >> a[i][j];
}
dp[n] = 0;
for (int i = n - 1; i >= 1; i --)
{
int mn = INT_MAX; // 代表最小值
for (int j = i + 1; j <= n; j ++)
{
if (a[i][j])
{
// dp[i] = min(dp[i], dp[j] + a[i][j]);
mn = min(mn, dp[j] + a[i][j]);
}
}
dp[i] = mn;
}
cout << dp[1];
return 0;
}
本节课答疑
建议大家有问题先通过AI答疑(比如:DeepSeek 等),AI时代需要学会使用AI辅助学习
陈远龙老师视频讲解:如何使用DeepSeek进行答疑?
通过AI未能获得满意解答的,可以联系陈远龙老师答疑
目录