当前位置: 首页 > news >正文

CCF-CSP认证考试 202309-3 梯度求解

一、题目描述(来源于截图)

二、思路解析

1.每个节点(表达式)需要同时存储:

  • 在当前点的函数值
  • 对目标变量的导数值

用Node<var, der>表示

2.求值过程:在计算表达式的同时对目标变量求导

3.算法流程:

  • 设定目标变量
  • 用栈计算后缀表达式:遇到操作符,根据是否是目标变量初始化<var, der>;遇到运算符,从栈弹出操作数,进行计算
  • 最终栈顶的der就是答案

三、代码实现

#include<iostream>
#include<vector>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;typedef long long ll;
const ll MOD = 1e9 + 7;struct Node {ll var;ll der;Node(ll v=0, ll d=0) : var(v%MOD), der(d%MOD) {}
};int main()
{int n,m;cin>>n>>m;vector<string> expr;string s;while(cin>>s && s!="\n"){expr.push_back(s);}for(int i=0;i<m;i++){int target;            // 目标变量cin>>target;vector<ll> point(n+1);for(int j=1;j<=n;j++){cin>>point[j];          //变量取值}stack<Node> st;for(const string& tok : expr){if(tok=="+"){Node right = st.top();st.pop();Node left = st.top();st.pop();Node res((left.var + right.var) % MOD, (left.der + right.der) % MOD);st.push(res);}else if(tok=="*"){Node right = st.top();st.pop();Node left = st.top();st.pop();Node res((left.var * right.var) % MOD, (left.var * right.der + left.der * right.var) % MOD);st.push(res);}else if(tok=="-"){Node right = st.top();st.pop();Node left = st.top();st.pop();Node res((left.var - right.var) % MOD, (left.der - right.der) % MOD);st.push(res);}else if(tok=="x"){//变量x1,x2,...xnint x = stoi(tok.substr(1));     ll der = (x==target) ? 1 : 0;   // 目标变量的导数为1,其他为0st.push(Node(point[x], der));    // 变量x的取值为point[x],导数为der}else{ll num = stoll(tok);    // 常量st.push(Node(num, 0));}}ll res = st.top().der;cout<<(res%MOD + MOD)%MOD<<endl;}return 0;
}

四、特殊方法解释

1.stoi ( tok . substr ( 1) )   是将字符串转化为整数

示例:

string s1 = " 123 ";

int num1 = stoi (s1);       // num1 = 123

tok . substr (1)---提取从位置1到字符串末尾的子串

对于 “x1" ---> "1"

对于 "x15" ---> "15"

http://www.dtcms.com/a/431404.html

相关文章:

  • JavaScript 保留关键字详解
  • 赣州那里有做网站的公司中国最新军事新闻最新消息2023
  • 使用 Python 将文件上传到 Supabase Storage 并记录元数据
  • 测试报告——“问卷考试系统”项目
  • 网站开发者常见问题网站建设 010
  • Digi-Star精准饲喂系统:牧场收益提升的利器,把Digi XBee模块应用到了极致
  • LED点阵屏
  • 图片方向矫正工具,批量处理超高效
  • 网站开发系统源代码模板兔自用主题WordPress
  • 鄢陵县网站wordpress编辑器器更换
  • 安阳网站推广优化点击最多的网站
  • 护理+人工智能研究热点数据分析项目实战(五)
  • 重庆市建设工程质量协会网站在招聘网站做销售
  • 2007 年真题配套词汇单词笔记(考研真相)
  • 羽毛球笔记
  • 风险 评估
  • Vue中使用el-table实现表格数据合并展示-demo
  • 【药物设计】三种分子碎片化方法介绍:Recap、BRICS与eMolFrag
  • 中断控制器介绍-硬件篇(arm)
  • 静态文件,动态文件,静态网站,动态网站
  • 如何做自动网站网站开发使用的工具
  • 用.net做购物网站西安公积金 网站建设
  • S7-200 SMART PROFINET 通信入门:硬件组态与原理详解
  • 已知三极管的类型(NPN/PNP)和基极引脚,如何区分集电极(c)和发射极(e)
  • 沈阳做网站 熊掌号西安百度竞价代运营
  • FFmpeg和ZLMediaKit 实现本地视频推流
  • 学校网站模板图片马来西亚做网站
  • 深圳展览设计网站建设门户是什么意思
  • k8s-Service服务
  • Arthas JVM 性能排查