1.31日

主要是完成了剩下的题目以及粗虐的了解了kmp算法

题一:表达式求值

将*进行处理 

#include <bits/stdc++.h>
#include <stack>
using namespace std;

int main() {
    stack<int> s;//创建队列
    int a, b;
    cin >> a;//读入第一个数
    const int m = 10000;
    a %= m;
    s.push(a);//将第一个数压入栈中

    char c;
    while (cin >> c >> b) 输出结果前按下回车键后再输入ctrl加z就可以的到结果了
{
        if (c == '*') {//遇到*就将*后面的b与栈顶元素相乘再压入栈中这样只要将栈中所有元素相加就能得到结果
            int t = s.top();//先把此元素存下来再删掉防止出现问题
            s.pop();
            s.push(t * b % m);
        } else {
            s.push(b);
        }
    }

    int sum = 0;
    while (!s.empty()) //一值加到栈为空
{
        sum = (sum + s.top()) % m;//对栈中元素进行累加的结果
        s.pop();
    }

    cout << sum << endl;
    return 0;
}

题二:

这题的题目好长

#include<stdio.h>
int a[6][500005],q[6];
int sum=0;
int main()
{int n,p;
	scanf("%d%d",&n,&p);
	int x,y;//这里的x表示某根贤y表是某段
	for(int i=1;i<=n;i++){
		scanf("%d %d",&x,&y);
		while(a[x][q[x]]>y){
			q[x]--;//释放某段的操作
			sum++;//记录步数
		}
		if(a[x][q[x]]<y){ 
			a[x][++q[x]]=y;//按下某段
		sum++;//记录步数
		}
	}
	printf("%d",sum);
	return 0;
 } 

 kmp(串的匹配)萌新版理解:

八皇后问题

#include<bits/stdc++.h>
using namespace std;int n;
int  c[10000],p[10000],q[10000];
int a[10000];
int flag,b;
void print()
{
	if(flag<=3)
	{
		for(int i=1;i<=n;i++)
		{
			cout<<a[i]<<" ";
		}
		cout<<endl;
	}
	
}
void dfs(int x)
{
	if(x>n)//表示已经每行排满了可行 
	{
		flag++;
		b++;//对可行方案进行累加 
		print();//输出 
	   	return;//放回至上次调用 
	}
	for(int i=1;i<=n;i++)
	{
		if(c[i]!=1&&p[i+x]!=1&&q[i-x+n]!=1)
		{
			a[x]=i;
			c[i]=p[i+x]=q[i-x+n]=1;//将行列及两条对角线标记p是/q是\; 
			dfs(x+1);//下一行 
			c[i]=p[i+x]=q[i-x+n]=0;//撤回标记 
		 
		}
	}
}
int main()
{
	
	cin>>n;
	dfs(1);//从第一行开始搜 
	cout<<b;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值