CSP认证准备第二天-第36/37次CCF认证
第37次CCF认证-第三题
主要是间接赋值比较难。
自己编写的代码如下,但是有问题,没有解决间接赋值的问题,可以参考一下deepseek的回答。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
long long n,x;
char a,c,d;
string b;
map<char,string> m;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
switch (x)
{
case 1:
cin>>a>>b;
m[a]=b;
break;
case 2:
{
cin >> a; // 读取目标字符 'c'
string src1, src2; // 用于读取 "$a" 和 "$b"
cin >> src1 >> src2;
// 提取 '$' 后面的字符(假设格式一定是 "$X")
c = src1[1]; // 取 "$a" 的第二个字符 'a'
d = src2[1]; // 取 "$b" 的第二个字符 'b'
m[a] = m[c] + m[d]; // 合并 m['a'] 和 m['b']
}
break;
case 3: //case 标签之间不能有变量的初始化,除非使用大括号 {} 创建一个作用域来限制变量的生命周期。
{
cin>>a; //还是不对,没办法更新,这里
int len=m[a].size();
int ans=len%1000000007;
cout<<ans<<endl;
}
break;
default:
break;
}
}
return 0;
}
引入变量:
// 变量可以是直接赋值的字符串,或者是间接赋值的表达式
struct Variable {
bool is_direct; // 是否是直接赋值
string direct_value; // 直接赋值的值
vector<string> expr; // 间接赋值的表达式(按空格分割的操作数)
};
map<string, Variable> variables; // 存储所有变量
但是deepseek给的代码运行起来也有问题,我就没再继续研究下去了。开始做有题解的题目吧。
第36次CCF认证-第一题 移动
笔者上次参加过第36次认证,菜菜的我只拿了190分,这次再重新做┭┮﹏┭┮
第一题我就不重新写了,我记得当时好像被小坑了一下,在注意外围不能超过n时,下限也不能低于1。
第36次CCF认证-第二题
笔者当时没有拿满分,这次看看题解再重新做一次吧。参考题解:CCF-CSP 梦境巡查-CSDN博客
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n; // 输入区域数量 n
int len = n + 1; // 区域编号 0~n,共 n+1 个区域
vector<int> a(len, 0); // a[0]~a[n]:移动消耗的能量
vector<int> b(len, 0); // b[1]~b[n]:补给的能量(b[0] = 0)
// 输入 a[0]~a[n]
for (int i = 0; i < len; i++) {
cin >> a[i];
}
// 输入 b[1]~b[n]
for (int i = 1; i < len; i++) {
cin >> b[i];
}
// 遍历每个区域 i(1~n),计算当 b[i] = 0 时的最小初始能量 w(i)
for (int i = 1; i < len; i++) {
int ans = 0; // 记录剩余能量的最小值
int sum = 0; // 当前剩余能量
int temp = b[i]; // 保存 b[i] 的原始值
b[i] = 0; // 模拟 b[i] = 0 的情况
// 模拟巡查过程:从 0 出发,依次访问 1~n,最后返回 0
for (int j = 0; j < len; j++) {
sum = sum - a[j] + b[j]; // 移动消耗 a[j],到达后获得 b[j]
ans = min(ans, sum); // 更新剩余能量的最小值
} //!如果是负数的话也没关系 本来就是要求缺多少
b[i] = temp; // 恢复 b[i] 的原始值 注意这里需要回复b[i]的原始值
cout << abs(ans) << " "; // w(i) = |min_energy|
}
cout << endl;
return 0;
}
我对中间的模拟还有一些疑惑,于是问了deepseek:
第36次CCF认证-第三题
对该题有印象,甚至尝试了一下,但是好像只拿到了部分分数,今天再来研究研究。