摘要: 题意:关于!,&,| 的运算,表达式中V代表true,F代表false。思路:见代码吧,很详细了。 要注意 !!!F,!(...) 的情况。#include #include #include #include #include using namespace std;const int maxn=105;stack val; //存储操作数和中间运算结果stack op; //存储运算符map maps; //存储相应运算符的优先级,数值大代表优先级高//求!avoid opNot(int a){ while(!op.empty() && op.top()==' 阅读全文
posted @ 2013-09-26 13:15 辰曦~文若 阅读(2780) 评论(0) 推荐(0)
摘要: 思路:将出车站的顺序存入数组train,由于入车站的顺序是固定的,为1~N,所以用P表示进站的车,初始为1。 接下来举例说明吧: 原来入站顺序: 1 2 3 4 5 读入的出战顺序: 3 4 2 5 1 按照train数组的顺序来执行, 1.一开始p=1,i=1: p与train[i]=3不相等,将p(1)入栈,p++;再比较不相等,将p(2)入栈,p++; p=train[3],则i++,p++; 2.i=2: 先比较train[i]与栈顶元素2是否相同,不相同,则与p比较。 train[i]=4与p(4)相等,i++,p++(5)... 阅读全文
posted @ 2013-09-25 13:17 辰曦~文若 阅读(174) 评论(0) 推荐(0)
摘要: 题意:一个长度为N的循环队列,一个人从1号开始逆时针开始数数,第K个出列,一个人从第N个人开始顺时针数数,第M个出列,选到的两个人要同时出列(以不影响另一个人数数),选到同一个人就那个人出列。思路:用数组来操作,详情见代码吧。#include #include #include /*用数组存储序号,从左到右依次为1~n。逆时针相当于从左往右依次数,大于n再从1开始,用right作为指针。顺时针相当于从右往左依次数,小于1再从n开始,用left作为指针。*/using namespace std;const int maxn=25;int p[maxn]; //存储一开始的序列int n,k,m 阅读全文
posted @ 2013-09-24 22:16 辰曦~文若 阅读(395) 评论(0) 推荐(0)
摘要: 题意:给出几组数据,每组有字符串W和T,问你W在T中出现几次。思路:字符串长度很大,用KMP算法。 一开始写的是:调用KMP算法查找W在T中是否匹配,若匹配,则个数+1。则接下来T的索引移动相应的距离,再调用函数判断T接下来的序列中是否存在W。 如果不能匹配,则终止。 结果,这样超时了。。。估计是调用函数上面花费了些时间。 后来直接在函数中记录出现的个数,这样就不超时了。#include #include #include using namespace std;const int maxT=1000010;const int maxW=10010;char w[maxW... 阅读全文
posted @ 2013-09-23 21:50 辰曦~文若 阅读(395) 评论(0) 推荐(0)
摘要: 题意:给出m个字符串,找出其中的最长公共子序列,如果相同长度的有多个,输出按字母排序中的第一个。思路:数据小,因此枚举第一个字符串的所有子字符串s,再一个个比较,是否为其它字符串的字串。判断是否为字串的时候,将s的字符依次与其他字符串的字符比较。#include #include #include #include #include using namespace std;const int maxm=15;const int maxlen=65;char str[maxm][maxlen]; //存储m个字符串char s[maxlen],ans[maxlen]; //s存储枚举str[0] 阅读全文
posted @ 2013-09-22 18:22 辰曦~文若 阅读(292) 评论(0) 推荐(1)
摘要: 题意:给出矩阵相乘的表达式,让你计算需要的相乘次数,如果不能相乘,则输出error。思路: 参考的网站连接:http://blog.csdn.net/wangjian8006/article/details/8905295 刚开始想到用栈的,但不知道怎么下手。后来网上查了一下,其实可以用结构体定义一个矩阵的类型,建立关于该结构体的栈,这样操作起来就方便多了。 遇到'(',无视继续;遇到字母,压入栈顶;遇到')',将栈顶前两个矩阵压出,并加上其相乘次数,再将所得的矩阵压入栈顶;这里解释这么做的原因: 注意看题目给出的表达式列表的形式,每两个矩阵相乘,左右必有一个括 阅读全文
posted @ 2013-09-22 15:28 辰曦~文若 阅读(457) 评论(0) 推荐(1)
摘要: 题意:给出f(x),g(x),h(x)的 (最高次幂+1)的值,以及它们的各项系数,求f(x)*g(x)/h(x)的余数。 这里多项式的系数只有1或0,因为题目要求:这里多项式的加减法是将系数相加/减后再模2,这样其实也就可以用异或运算来代替加减法。思路:看代码吧,水题一个,主要在于把除法转化成减法,一次一次减就行。#include #include #include using namespace std;const int maxn=2010;//f,g,h存储的是多项式的系数,sum存储的是f*g的系数以及最后余数的系数int f[maxn],g[maxn],h[maxn],sum[m. 阅读全文
posted @ 2013-09-22 10:52 辰曦~文若 阅读(535) 评论(0) 推荐(0)
摘要: 题意:给出N,A,计算i*A^i(i=1~N)的和。1#include #include #include #include using namespace std;int N,A;int n1,n2,n3;//n1表示a的位数,n2表示b的位数,n3表示c的位数int a[10],b[10],c[200]; //a存储A的值,b存储N的值,c存储A^i的值int ans[200],tmp[200]; //ans存储最后的结果void add(int b[]) { for(int i=0; i9) { ans[i]-=10; ans[i+1]+... 阅读全文
posted @ 2013-09-18 15:01 辰曦~文若 阅读(646) 评论(0) 推荐(0)
摘要: 题意:给两个整数,求这两个数的反向数的和的反向数,和的末尾若为0,反向后则舍去即可。即若1200,反向数为21。题目给出的数据的末尾不会出现0,但是他们的和的末尾可能会出现0。#include #include #include #include #include using namespace std;int n1,n2;//n1表示a的位数,n2表示b的位数int a[100],b[100];void add() { for(int i=0; in2?n1:n2); i++) { a[i]=a[i]+b[i]; if(a[i]>9) { ... 阅读全文
posted @ 2013-09-18 10:17 辰曦~文若 阅读(292) 评论(0) 推荐(0)
摘要: 刚开始一直WA,才发现原来代码中两处减去年份、月份的天数的判断条件用的是>=,虽然最后考虑n=0要退回一天的情况,但还是WA。后来改成>的条件判断,省去了考虑n=0的麻烦,AC。此题无非就是考虑平年、闰年,月底月末,年底年末的情况。#include #include #include #include #include using namespace std;char strd[33][5],strm[14][5];char week[7][12]={"Saturday","Sunday","Monday","T 阅读全文
posted @ 2013-09-17 20:52 辰曦~文若 阅读(247) 评论(0) 推荐(0)