首页 > 其他分享 >CCF-CSP真题《202309-3 梯度求解》题解

CCF-CSP真题《202309-3 梯度求解》题解

时间:2024-03-31 12:11:55浏览次数:23  
标签:202309 temp 真题 题解 rson tree return mod con

题目

string转longlong忘记处理负数卡了半天,服了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<sstream>
typedef long long ll;
using namespace std;
int n,m,temp;
ll a[302];
string f,x,b;
ll mod=1e9+7;

struct node
{
	string con;
	node* lson;
	node* rson;
	int size;
}tree[302];

bool isSymble(string x)
{
	if(tree[temp].con=="+" || tree[temp].con=="-" || tree[temp].con=="*") return true;
	else return false;
}

ll ato(string x)
{
	ll tans = 0;
	bool flag=false;
	for(int i=0;i<x.length();i++)
	{
		if(x[i]=='-')
		{
			flag=true;
			continue;
		}
		tans *= 10;
		tans += ll(char(x[i])-'0');
		tans = tans%mod;
	}
	if(flag) tans=-tans;
//	cout<<flag;
	return tans%mod;
}

ll get(node* p)
{
	string con = p->con;
	if(con=="+") return (get(p->lson) + get(p->rson))%mod;
	if(con=="-") return (get(p->lson) - get(p->rson))%mod;
	if(con=="*") return (get(p->lson) * get(p->rson))%mod;
	if(con.substr(0,1)=="x") return a[ato(con.substr(1))]%mod;
	else return ato(con)%mod;
}

ll solve(node* p)
{
	string con = p->con;
	if(con=="+") return (solve(p->lson) + solve(p->rson))%mod;
	if(con=="-") return (solve(p->lson) - solve(p->rson))%mod;
	if(con=="*") return (((solve(p->lson)*get(p->rson))%mod) + ((solve(p->rson)*get(p->lson))%mod))%mod;
	if(con.substr(1)==b) return 1;
	else return 0;
}

int main()
{
	scanf("%d%d",&n,&m);
	getchar();
	getline(cin, f);
    stringstream ss(f);
	while(ss>>x)
	{
		temp++;
		tree[temp].con = x;
		if(isSymble(tree[temp].con))
		{
			int tmp=temp;
			tmp--;
			tree[temp].rson = &tree[tmp];
			tmp -= tree[tmp].size;
			tree[temp].lson = &tree[tmp];
			tree[temp].size = 1 + tree[temp].lson->size + tree[temp].rson->size; 
		}
		else
		{
			tree[temp].size = 1;
			tree[temp].lson = NULL;
			tree[temp].rson = NULL;
		}
	}
//	for(int i=1;i<=temp;i++)
//	{
//		cout<<i<<"\t"<<tree[i].con<<"\t"<<tree[i].size;
//		if(tree[i].lson!=NULL) cout<<"\t"<<tree[i].lson->con;
//		if(tree[i].rson!=NULL) cout<<"\t"<<tree[i].rson->con;
//		cout<<endl;
//	} 
	for(int i=1;i<=m;i++) 
	{
		cin>>b;
		for(int j=1;j<=n;j++) scanf("%lld", &a[j]);
		ll ans = solve(&tree[temp]);
		ll mans = ans%mod;
		if(mans<0) mans+=mod;
		printf("%lld\n", mans);
	}
} 

标签:202309,temp,真题,题解,rson,tree,return,mod,con
From: https://www.cnblogs.com/xiaojuA/p/18106557

相关文章

  • 矩阵匹配【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-矩阵匹配从一个NM(N<=M)的矩阵中选出N个数,任意两个数字不能在同一行或同一列,求选出来的N个数中第K大的数字的最小值是多少。输入描述:输入矩阵要求:1<=K<=N<=M<=150输入格式:NMKNM矩阵输出描述:N*M的矩阵中可以选出M!/N!种组合数组,每个组合数组中第K大的数中的......
  • 文本统计分析【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-文本统计分析有一个文件,包含以一定规则写作的文本,请统计文件中包含的文本数量规则如下文本以";“分隔,最后一条可以没有”;",但空文本不能算语句,比如"COMMANDA;;"只能算一条语句.注意,无字符/空白字符/制表符都算作"空"文本文本可以跨行,比如下面,......
  • [ABC347C] Ideal Holidays题解
    [ABC347C]IdealHolidays题解原题传送门原题传送门(洛谷)​ 题意翻译:​ 在\(AtCoder\)王国中,一个周有\(A+B\)天。其中在一周中,\([1,A]\)天是假日,\([A+1,B]\)天是工作日。​ 高桥有\(N\)个计划,第\(i\)个计划安排在\(i\)天后。他不知道今天是周几,但他想知道是否......
  • AT_abc347_d 的题解
    (一)数学题。根据\(C\)的值,可以得出\(x\)和\(y\)有\(s1+s\)个相同的数位和\(s2\)个不同的数位。\(s1\)是\(C\)的二进制中\(0\)的数量,\(s2\)是\(C\)的二进制中\(1\)的数量。\(x\)和\(y\)可以通过在开头放\(s\)个\(1\)的方式既不改变异或大小,又能凑到......
  • AT_abc347_e的题解
    (一)可能因为我太菜了,感觉D>E。用\(vis_i\)表示\(i\)是否出现,\(sum_i\)表示当前集合大小。用vector维护出现的区间的端点。将\(sum\)数组前缀和即可。(二)AC代码。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,q,x,siz,sum[200010];......
  • BZOJ4977 跳伞求生题解
    传送门题意:有\(n\)个队友和\(m\)个敌人,每个队友\(i\)有\(a_i\)颗子弹。敌人\(j\)有\(b_j\)颗子弹。队友击杀敌人,必须\(a_i>b_j\),然后会获得\(a_i-b_j+w_j\)的收益。(\(w_j\):每个敌人都有一个参数)每个队友只能打一个敌人,可以不打。求最大收益。【费用流模型......
  • 大学教材《C语言程序设计》(浙大版)课后习题解析 | 第七、八章
    概述    本文主要提供《C语言程序设计》(浙大版)第七、八章的课后习题解析,以方便同学们完成题目后作为参考对照。后续将更新第九、十章节的课后习题解析,如想了解更多,请持续关注该专栏。专栏直达链接:《C语言程序设计》(浙大版)_孟俊宇-MJY的博客-CSDN博客​http://t.cs......
  • 提问的力量:驱动问题解决、核心发现与创新启示
    目录问题解决的驱动力:提问的力量提问的力量:催生解决方案的火花提问的力量:启发新思想的源泉核心发现的推动力:提问的力量提问的力量:推动科学探索与发现提问的力量:揭示历史真相创新启示:提问的力量提问的力量:激发创新思维提问的力量:推动社会进步探索篇:提问与问题解决—......
  • 【2024年5月备考新增】《软考真题分章练习(含答案解析) - 14 组织级项目管理(高项)》
    1题目1、办公软件开发公司A非常重视软件过程管理,按照CMMI(能力成熟度模型)逐步进行过程改进,刚刚实现了组织级过程性能、定量项目管理,按照CMMI(能力成熟度模型),A公司达到了()级别。A.CMMI2B.CMMI3C.CMMI4D.CMMI52、CMMI的连续式表示法与阶段式表示法分别表示:()。A.项......
  • 大学教材《C语言程序设计》(浙大版)课后习题解析 | 第五、六章
    概述   本文主要提供《C语言程序设计》(浙大版)第五、六章的课后习题解析,以方便同学们完成题目后作为参考对照。后续将更新第七、八章节课后习题解析,如想了解更多,请持续关注该专栏。专栏直达链接:《C语言程序设计》(浙大版)_孟俊宇-MJY的博客-CSDN博客http://t.csdnimg......