PAT L2-031&L2-032

上周六的天梯赛被L1-8卡到最后,如果我会打比赛的话,如果我在有一点经验的话,队伍的成绩会好很多,因为L2的这两题一个BFS和一个Stack是可以秒的。自己还是不能再比赛中激发更强大的能力,只能说没有做好比赛的准备,输了比赛。
L2-031:先找到入口,然后BFS,注意这里用vector动态存储:

#include <iostream>
#include <string>
#include <queue>
using namespace std;
vector<vector<int> > a; 
int main()
{
    int n;
    cin>>n;
    vector<int> in(n+1,0);
    a.push_back({});
    for(int i=1;i<=n;i++){
    	vector<int> temp;
    	int w;
    	cin>>w;
    	temp.push_back(w);
    	for(int j=1;j<=w;j++){
    		int t;
    		cin>>t;
    		in[t]=1;
    		temp.push_back(t);
		}
		a.push_back(temp);
	}
	int getin;
	for(int i=1;i<=n;i++){
		if(in[i]==0){
			getin=i;
			break;
		}
	}
	queue<int> q;
	q.push(getin);
	int ans;
	while(!q.empty()){
		int n = q.size();
		for(int i=0;i<n;i++){
			int d = q.front();
			q.pop();
			ans = d;
			for(int j=1;j<=a[d][0];j++){
				q.push(a[d][j]);
			}
		}
	}
	cout<<ans;
    return 0;
}

L2-032:直接用用一个stack水题:

#include <iostream>
#include <string>
#include <queue>
#include <stack>
using namespace std;
int main()
{
    int n,m,k;
    cin>>n>>m>>k;
    while(k--){
    	vector<int> a(n,0);
    	stack<int> s;
    	for(int i=0;i<n;i++){
    		cin>>a[i];
		}
		int want=1,f=1;
		for(int i=0;i<n;i++){
			if(a[i]!=want){
				while(!s.empty()){
					if(s.top()==want){
						s.pop();
						want++;
					}else{
						break;
					}
				}
				if(s.size()==m){
					f=0;
					cout<<"NO"<<endl;
					break;
				}
				s.push(a[i]);
			}else{
				want++;
			}
		}
		while(!s.empty()){
					if(s.top()==want){
						s.pop();
						want++;
					}else{
						break;
					}
				}
		if(s.empty()){
			cout<<"YES"<<endl;
		}else if(f){
			cout<<"NO"<<endl;
		}
	}
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Csdn_jey/article/details/88953725