算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。
2+3*(7-4)+8/4输出样例:2374-*+84/+这种特判题还是不太熟练,回去反省,需要考虑+2,-3,1.5
86070809030401020输出样例:6017028039043014051012025按题意模拟
1#include
输入数据包括城镇数目正整数N(<=1000)和候选道路数目M(<=3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。
输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出1,表示需要建设更多公路。
6151251331471541622342462522663463513614510468563输出样例:12最小生成树模板
输入首先给出正整数N(<=104),表示要将木头锯成N块。第二行给出N个正整数(<=50),表示每段木块的长度。N个正整数(≤50),表示每段木块的长度。
输出一个整数,即将木头锯成N块的最少花费。
845121311输出样例:49每次取最小两个合并
输入的第一行是正整数N(<=105)。随后N行,每行给出一句指令,为以下3种之一:
PushkeyPopPeekMedian
其中key是不超过105的正整数;Push表示“入栈”;Pop表示“出栈”;PeekMedian表示“取中值”。的正整数Push表示“入栈”;Pop表示“出栈”;PeekMedian表示“取中
对每个Push操作,将key插入堆栈,无需输出;对每个Pop或PeekMedian操作,在一行中输出相应的返回值。若操作非法,则对应输出Invalid。
17PopPeekMedianPush3PeekMedianPush2PeekMedianPush1PeekMedianPopPopPush5Push4PeekMedianPopPopPopPop输出样例:InvalidInvalid322124453Invalidpop和push操作直接用栈操作
由于N很大,中位数如果用数组移位插入删除会超时O(n),可以考虑二分[0,100000]然后用树状数组判断前面有几个比他小O(lognlogn)
总复杂度O(nlognlogn),有人说O(n^2)可以过,orz
输入在第一行给出一个正整数N(<=1000),为社交网络平台注册的所有用户的人数。于是这些人从1到N编号。随后N行,每行按以下格式给出一个人的兴趣爱好列表:
Ki:hi[1]hi[2]...hi[Ki]
其中ki>0是兴趣爱好的个数,hi[j]是第j个兴趣爱好的编号,为区间[1,1000]内的整数。
首先在一行中输出不同的社交集群的个数。随后第二行按非增序输出每个集群中的人数。数字间以一个空格分隔,行末不得有多余空格。
83:27101:42:531:41:31:44:68151:4输出样例:3431并查集,1-1000是兴趣的编号,1001-1000+n是人的编号
然后就是并查集模板了
1#include
现在给你连续几天的操作序列,且已知第一天肯定会派出老鼠,请判断老鼠每天的状态,并计算盈利。
输入在一行中给出连续的由C或T或X组成的不超过70个字符的字符串,以$结束。字符串中每个字符表示这一天的操作(即X:什么都不放;T:放捕鼠夹;C:放奶酪)。题目保证至少有一天的操作输入。
要求在第一行输出连续的字符串,与输入相对应,给出老鼠的状态:
第二行则应输出一个整数表示盈利。(如果有亏损,则是负数)
TXXXXC$输出样例1:D--U-!4输入样例2:CTTCCX$输出样例2:!DD--U11按题意模拟,水平不好代码有点长
输入的第一行是正整数N(<=1000),为散列表的长度。第二行给出了N个整数,其间用空格分隔,每个整数在序列中的位置(第一个数位置为0)即是其在散列表中的位置,其中负数表示表中该位置没有元素。题目保证表中的非负整数是各不相同的。
按照插入的顺序输出这些整数,其间用空格分隔,行首尾不能有多余的空格。注意:对应同一种分布结果,插入顺序有可能不唯一。例如按照顺序3、2、1插入长度为3的散列表,我们会得到跟1、2、3顺序插入一样的结果。在此规定:当前的插入有多种选择时,必须选择最小的数字,这样就保证了最终输出结果的唯一性。
1133113123438272232-121输出样例:1131221333438272232直接莽了个暴力,果然出奇迹
首先需要知道线性探测就是如果a[i]%n产生冲突就往后去找空的填(离散课)
然后就是把可以填的都找到,然后输出个最小的
O(n^3)~1e9嗯10ms
1#include 现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。 输入在一行中给出一个[0,153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。 输出对应的十进制数。 18输出样例:12水题 1#include 输入在一行中给出2个正整数A和B。 在4行中按照格式“A运算符B=结果”顺序输出和、差、积、商。 32输出样例:3+2=53-2=13*2=63/2=1水题 1#include 输入在一行中给出一个不超过10000的正整数N。 在一行中输出兔子总数达到N最少需要的月数。 30输出样例:9dp[i]表示第i天有多少对兔子 显然dp[i]=dp[i-1]+dp[i-2](昨天的+新出生的) 1#include 输入在一行中按照a1b1a2b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部。题目保证C2不为0。 分别在4行中按照(a1+b1i)运算符(a2+b2i)=结果的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。如果结果的实部或者虚部为0,则不输出。如果结果为0,则输出0.0。 23.08-2.045.06输出样例1:(2.0+3.1i)+(-2.0+5.1i)=8.1i(2.0+3.1i)-(-2.0+5.1i)=4.0-2.0i(2.0+3.1i)*(-2.0+5.1i)=-19.7+3.8i(2.0+3.1i)/(-2.0+5.1i)=0.4-0.6i输入样例2:11-11.01输出样例2:(1.0+1.0i)+(-1.0+1.0i)=0.0(1.0+1.0i)-(-1.0+1.0i)=2.0+2.0i(1.0+1.0i)*(-1.0+1.0i)=-2.0i(1.0+1.0i)/(-1.0+1.0i)=-1.0大模拟,输出比较麻烦,这个精度误差EPS=0.1才可以过(跪了),除法考虑上下同乘共轭复数 本题目没有输入。 按照下列格式输出 fahr=100,celsius=计算所得摄氏温度的整数值通过计算得到C=37.7输出37即可,一开始输出了38(emmm) 1#include 要求严格按照给出的格式输出下列表格: ------------------------------------ProvinceArea(km2)Pop.(10K)------------------------------------Anhui139600.006461.00Beijing16410.541180.70Chongqing82400.003144.23Shanghai6340.501360.26Zhejiang101800.004894.00------------------------------------水题 1#include 图1 现在假如你是“水果忍者”游戏的玩家,你要做的一件事情就是,将画面当中的水果一刀砍下。这个问题看上去有些复杂,让我们把问题简化一些。我们将游戏世界想象成一个二维的平面。游戏当中的每个水果被简化成一条一条的垂直于水平线的竖直线段。而一刀砍下我们也仅考虑成能否找到一条直线,使之可以穿过所有代表水果的线段。 图2 如图2所示,其中绿色的垂直线段表示的就是一个一个的水果;灰色的虚线即表示穿过所有线段的某一条直线。可以从上图当中看出,对于这样一组线段的排列,我们是可以找到一刀切开所有水果的方案的。 另外,我们约定,如果某条直线恰好穿过了线段的端点也表示它砍中了这个线段所表示的水果。假如你是这样一个功能的开发者,你要如何来找到一条穿过它们的直线呢? 输入在第一行给出一个正整数N(<=104),表示水果的个数。随后N行,每行给出三个整数x,y1,y2,其间以空格分隔,表示一条端点为(x,y1)和(x,y2)的水果,其中y1>y2。注意:给出的水果输入集合一定存在一条可以将其全部穿过的直线,不需考虑不存在的情况。坐标为区间[10-6,106)内的整数。 在一行中输出穿过所有线段的直线上具有整数坐标的任意两点p1(x1,y1),p2(x2,y2),格式为x1,y1,x2,y2。注意:本题答案不唯一,由特殊裁判程序判定,但一定存在四个坐标全是整数的解。 首先如果线段X都相同(重合),那么就输出最小的上端点和最大的下端点 上图是通过对线段进行上下凸壳处理后的结果 上凸壳u维护一个栈,如果栈>=2并且p[i-1]在p[i-2]和p[i]的上方,就是(p[i]-p[i-1])X(p[i-2]-p[i-1])>0(叉积>0) 同理下凸壳d,叉积<0 根据题意,必然有解,那么上下凸壳不重合,答案就是图中灰色的虚线