第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; // 輸入區域數量 nint 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,最后返回 0for (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認證-第三題
? 對該題有印象,甚至嘗試了一下,但是好像只拿到了部分分數,今天再來研究研究。