每天一套题打卡|河南省第九届ACM/ICPC
A 表达式求值

表达式求值:可以用递归求解,也可以用栈模拟,考过多次。
类似题目:NYOJ305,NYOJ35
用栈模拟做法:
#include <stdio.h>
#include <string.h>
#include <stack>
using namespace std;
stack<int> dsta;//数据栈
stack<char> osta;//字符栈
char s[1005];
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
scanf("\n%s",&s[1]);
int len=strlen(&s[1]);
s[0]='('; s[++len]=')';//在给定的表达式两端添加上一对括号
for(i=0;i<=len;i++)
{
if(s[i]=='(')
osta.push(s[i]);
else if(s[i]=='S')
{
osta.push('(');//压入一个左括弧
i+=3;
}
else if(s[i]>='0' && s[i]<='9')
{
int v=0;
while(s[i]>='0' && s[i]<='9')
v=v*10+(s[i++]-'0');
i--;
dsta.push(v);
}
else if(s[i]=='+')
{
while(osta.top()!='(' && osta.top()!=',')
{
int a=dsta.top(); dsta.pop();
int b=dsta.top(); dsta.pop();
int c;
switch(osta.top())
{
case '+':c=b+a;break;
case '*':c=b*a;break;
}
dsta.push(c);
osta.pop();
}
osta.push(s[i]);
}
else if(s[i]=='*')
{
if(osta.top()=='*')
{
int a=dsta.top(); dsta.pop();
int b=dsta.top(); dsta.pop();
dsta.push(b*a);
osta.pop();
}
osta.push(s[i]);
}
else if(s[i]==')' || s[i]==',')//遇到逗号及时求值
{ //当遇到 ','时,就把Smax的前半部分表达式的值求出来
//运算符号 都在这里计算 + - * / smax自定义
while(osta.top()!='(')
{
int a=dsta.top(); dsta.pop();
int b=dsta.top(); dsta.pop();
int c,suma=0,sumb=0;
switch(osta.top())
{
case '+':c=b+a;break;
case '*':c=b*a;break;
case ',':{
//逐位分割求和
while(b!=0)
{
sumb+=b%10; b/=10;
}
while(a!=0)
{
suma+=a%10; a/=10;
}
c=max(suma,sumb);
break;
}
}
dsta.push(c);
osta.pop();
}
osta.pop();
if(s[i]==',')//求完值之后,把逗号压入栈内,以便后半部分Smax表达式的求值
osta.push(s[i]);
}
}
printf("%d\n",dsta.top());
dsta.pop();
}
return 0;
}
B 宣传墙
状压dp 推状态转移
或者用矩阵快速幂优化
网上代码看不懂。。。
C 信道安全
单源点的最短路修改版,用dijkstra做,初始化dist数组和松弛改一下就可以了。
D 导弹发射
LIS的二分写法,数据量1e5 O(N^2)的会超时。
另外题目中说的 导弹一直在前进,不能以原来的X/Y轴作为坐标轴了,需要坐标变换以两条射线为坐标轴
E 机器设备
我用bfs搜索做的,从原点(0,0)开始搜,每次将与当前点相切的圆心齿轮加入到队列,这里的相切意思是:两个圆心距离等于两个圆半径和
F Decimal integer conversion
题意:给一个十进制数 的二进制数 和一个 三进制数,其中各有一位是错的,求正确的十进制数
枚举一下就可以了,二进制和三进制 转成10进制后出现相同的数就是答案
G Prototypes analyze
一个二叉搜索树,问形状有多少个。
明天看题解,学会建树吧......
jBST二叉搜索树的创建 参考博客:https://blog.csdn.net/stpeace/article/details/9067029
nyoj1278 题解参考博客:https://blog.csdn.net/baidu_35643793/article/details/70792326
这道题 题意就是 判断二叉排序树的形状有多少个不一样。
首先 建树 就用上面的板子。
然后就是 判断形状:只需要各个位置是否对应一致有值就行了(如果一颗树在这个地方是空的,那么另一颗树要想与它形状相同,这个地方也必须是空的)
//BST二叉搜索树;
#include<cstdio>
#include<iostream>
using namespace std;
int flag;
typedef struct Node
{
int key;
struct Node *lChild,*rChild;
} Node,*BST;
bool BSTInsert(Node * &p,int element)
{
if(p==NULL)
{
p=new Node;
p->key=element;
p->lChild=p->rChild=NULL;
return true;
}
if(element==p->key)
return false;
if(element<p->key)
return BSTInsert(p->lChild,element);
return BSTInsert(p->rChild,element);
}
void judge(BST T1,BST T2) //判断形状;
{
if(T1==NULL&&T2==NULL)
return;
else if(T1&&T2)
{
judge(T1->lChild,T2->lChild);
judge(T1->rChild,T2->rChild);
}
else
flag=0;
}
int main()
{
int t,n,k,x;
BST tree[55];
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(int i=0; i<n; i++)
{
BST T=NULL;
for(int j=0; j<k; j++) //建树;
{
scanf("%d",&x);
BSTInsert(T,x);
}
tree[i]=T;
}
//找形状种类数;
int ans=0;
for(int i=0; i<n; i++)
{
int flog=1;
for(int j=i+1; j<n; j++)
{
flag=1;
judge(tree[i],tree[j]);
if(flag)
{
flog=0;
break;
}
}
if(flog)
++ans;
}
printf("%d\n",ans);
}
return 0;
}
每天一套题打卡|河南省第九届ACM/ICPC的更多相关文章
- 每天一套题打卡|河南省第十一届ACM/ICPC
A 计划日 题意:已知李明在YYYY年MM月DD日星期W订了学习计划,现在想看看李明N天后的完成情况和个人总结,你能告诉我那天的日期和星期几吗? 模拟日期计算: 计算星期可以用基姆拉尔森公式 //中国 ...
- 每天一套题打卡|河南省第十届ACM/ICPC
A.谍报分析 题意:请你编程,快速统计出频率高的前十个单词. 思路:字符串输入,map哈希表map<string,int >记录每个单词出现的次数,pair重载优先级 #include&l ...
- 每天一套题打卡|河南省第七届ACM/ICPC
A 海岛争霸 题目:Q次询问,他想知道从岛屿A 到岛屿B 有没有行驶航线,若有的话,所经过的航线,危险程度最小可能是多少. 多源点最短路,用floyd 在松弛更新:g[i][k] < g[i][ ...
- 每天一套题打卡|河南省第八届ACM/ICPC
A 挑战密室 化学方程式求分子量 这题我懒得写了 可以用map<string,int>哈希表,表示每种分子的相对分子质量 之后,从头遍历到尾. 1.数字:连读直到不是数字 2.字母:连读直 ...
- nyoj 1279 (河南省第九届ACM比赛 D 题)
思路:变换一下坐标系新的坐标系就是给定的两条直线,变换之后求 x,y 都严格递增的点的个数的max: 求 x,y 都严格递增的点的个数的max,按照x的从小到大排序,x相同的按照y的从大到小排序然后对 ...
- 递推水题 Codeforces Round #289 (Div. 2, ACM ICPC Rules) A. Maximum in Table
题目传送门 /* 模拟递推水题 */ #include <cstdio> #include <iostream> #include <cmath> #include ...
- [水题日常]UVA1639 糖果(Candy,ACM/ICPC Chengdu 2012)
今天来尝试了几道数学期望相关的题,这是我认为比较有趣的一道题 这次不废话啦直接开始~ 一句话题意:两个分别装有n个糖果的盒子,每次随机选一个盒子然后拿走一颗糖(选的概率分别是\(p\)和\((1-p) ...
- codeforces水题100道 第十八题 Codeforces Round #289 (Div. 2, ACM ICPC Rules) A. Maximum in Table (brute force)
题目链接:http://www.codeforces.com/problemset/problem/509/A题意:f[i][1]=f[1][i]=1,f[i][j]=f[i-1][j]+f[i][j ...
- 第46套题【STL】【贪心】【递推】【BFS 图】
已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...
随机推荐
- mysql 高级查询二
各种showshow columns from my_student;show grants for root;show aviables;show processlist;show table st ...
- Java定义的数据类型
/* Java定义的数据类型 一.变量按照数据类型来; 基本数据类型; 整型:byte short int long 浮点型 float double 字符型 char 布尔型:boolean ...
- 洛谷P3157 [CQOI2011]动态逆序对
题目大意: 给定\(1\)到\(n\)的一个排列,按照给定顺序依次删除\(m\)个元素,计算每个元素删除之前整个序列的逆序对数量 基本套路:删边变加边 那么我们不就是求满足\(pos_i<pos ...
- codevs 3304 水果姐逛水果街Ⅰ
这道题可以用ST表过: 题目链接 记录4个数组:maxval[][], minval[][], ans[][], rans[][] maxval[i][j]表示从i号元素开始,长度为(1<< ...
- [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机
[LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机 题意 给定平面上的 \(n\) 个整点 \((x_i,y_i)\), 一共有两个问题. 第一个问题是从原 ...
- 在windows上搭建git服务器教程
1.首先,需要确保windows系统上安装并配置了Java运行环境,JDK>=1.7. 2.下载Gitblit,下载地址:http://www.gitblit.com/ 3.解压缩下载的压缩包即 ...
- WIFI Portal登录
开头 关于 ANDROID 5.0-7.1.2 网络图标上的感叹号及其解决办法-狐狸的小小窝 HTTP状态码之204 No Content 原理 访问generate_204地址,如果得到状态码是20 ...
- Vue+Element UI 实现视频上传
一.前言 项目中需要提供一个视频介绍,使用户能够快速.方便的了解如何使用产品以及注意事项. 前台使用Vue+Element UI中的el-upload组件实现视频上传及进度条展示,后台提供视频上传AP ...
- Centos7安装percona-xtrabackup2.4和8.0版本
Percona XtraBackup是一个基于MySQL的服务器的开源热备份实用程序 ,它不会在备份期间锁定您的数据库.无论是24x7高负载服务器还是低事务量环境,Percona XtraBackup ...
- BIM软件Revit的优点
BIM软件Revit的优点 那么多人喜欢使用这个软件的是因为BIM软件Revit极其强大的集成性和平台性. BIM软件Revit的集成性 建筑是一个复杂数 ...