zoukankan      html  css  js  c++  java
  • 2020年冬季PAT甲级

    代码懒得修了,写的特别烂

    1

    题目

    思路

    直接求就好了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll f[120]={0,1};
    ll n,dif=1e9,ans=1;
    int main(){
    	cin>>n;
    	for(int i=2;i<=60;i++){
    		f[i]=f[i-1]+f[i-2];
    		//cout<<f[i]<<endl;
    	}
    	for(int i=1;i<=60;i++){
    		if(abs(n-f[i])<dif){
    			ans=f[i];
    			dif=abs(n-f[i]);
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    

    2

    题目

    思路

    直接匹配可能超时,从子序列串第一个字母在母串出现的位置开始匹配。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    string s,q;
    vector<int>st;
    string ans;
    int len=1e9;
    int main(){
    	cin>>s>>q;
    	if(q.size()==1){
    		cout<<q<<endl;
    		return 0;
    	}
    	for(int i=0;i<s.size();i++){
    		if(s[i]==q[0]){
    			st.push_back(i);
    		}
    	}
    	for(int i=0;i<st.size();i++){
    		int l=st[i],p=1;
    		
    		for(int j=l+1;j<s.size();j++){
    			if(s[j]==q[p]){
    				p++;
    			}
    			if(p==q.size()){
    				int t=j-l+1;
    				if(t<len){
    					len=t;
    					ans=s.substr(l,t);
    				}
    				break;
    			}
    		}
    	}
    	if(len!=1e9) cout<<ans<<endl;
    	else{
    		cout<<endl;
    	}
    	return 0;
    }
    

    3

    题目

    思路

    直接建树求。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int n,m;
    string s;
    int lasdep[1020];
    struct E{
    	string s;
    	int f;
    }e[1020];
    map<string,int>mp;
    void dfs(int d){
    	if(e[d].f!=-1){
    		dfs(e[d].f);
    	}
    	if(e[d].f!=-1){
    		cout<<"->";
    	}
    	cout<<e[d].s;
    	
    }
    int main(){
    	cin>>n;
    	getline(cin,s);
    	for(int i=1;i<=n;i++){
    		getline(cin,s);
    		int l=0;
    		for(l=0;l<s.size();l++){
    			if(s[l]!=' ') break;
    		}
    		string cur=s.substr(l);
    		mp[cur]=i;
    		e[i].s=cur;
    		lasdep[l]=i;
    		if(l==0){
    			e[i].f=-1;
    			continue;	
    		}
    		e[i].f=lasdep[l-1];
    	}
    	cin>>m;
    	string q;
    	for(int i=1;i<=m;i++){
    		cin>>q;
    		if(!mp[q]){
    			cout<<"Error: "<<q<<" is not found."<<endl;
    		}
    		else{
    			dfs(mp[q]);
    			cout<<endl;
    		}
    	}
    	return 0;
    }
    

    4

    题目

    思路

    dfs枚举制造m个所有的情况,然后排序。

    一开始读错题,然后猜了一下题意。

    ==重载写错,改了就过了。

    如果是更难的题意,extend应该能骗点分。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define io_opt ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
    int n,m,k;
    void ot(int x){
    	if(x>=10){
    		cout<<x;
    	}
    	else{
    		cout<<'0'<<x;
    	}
    }
    int num(string x){
    	int ret=0;
    	if(x[0]=='+'){
    		return -2;
    	}
    	else if(x[0]=='-'){
    		return -1;
    	}
    	for(int i=0;i<x.size();i++){
    		ret*=10;
    		ret+=x[i]-'0';
    	}
    	return ret;
    }
    string s;
    int c[120];
    int w[120];
    int pro[120];
    struct E{
    	vector<int>v;
    	void print(){
    		//sort(v.begin(),v.end());
    		for(int i=0;i<v.size();i++){
    			if(i!=0){
    				cout<<" + ";
    			}ot(v[i]);
    		}
    	}
    	bool operator<(const E x)const{
    		
    		for(int i=0;i<min(v.size(),x.v.size());i++){
    			if(v[i]==x.v[i]) continue;
    			return v[i]<x.v[i];
    		}
    		return v.size()<x.v.size();
    	}
    	bool operator==(const E x)const{
    		return v==x.v;
    	}
    };
    vector<E>pth[120];
    vector<vector<E>>ans;
    vector<E>tmp;
    map<int,int>mp;
    bool check(int u,int i){
    	E cur=pth[pro[u]][i];
    	for(int i=0;i<cur.v.size();i++){
    		if(mp[cur.v[i]]||w[cur.v[i]]==0) return false;
    	}
    	return true;
    }
    void mer(int u,int i){
    	E cur=pth[pro[u]][i];
    	for(int i=0;i<cur.v.size();i++){
    		mp[cur.v[i]]++;
    	}
    }
    void invmer(int u,int i){
    	E cur=pth[pro[u]][i];
    	for(int i=0;i<cur.v.size();i++){
    		mp[cur.v[i]]--;
    	}
    }
    void dfs(int u){
    	//cout<<u<<":
    ";
    	if(u==m+1){
    		ans.push_back(tmp);
    		return;
    	}
    	for(int i=0;i<pth[pro[u]].size();i++){
    		//cout<<u<<' '<<i<<endl;
    		if(check(u,i)){
    			tmp.push_back(pth[pro[u]][i]);
    			mer(u,i);
    			dfs(u+1);
    			invmer(u,i);
    			tmp.pop_back();
    		}
    	}
    }
    int cmp(vector<E> x,vector<E> y){
    	for(int i=0;i<x.size();i++){
    		if(x[i]==y[i]) continue;
    		return x[i]<y[i];
    	}	
    }
    void output(vector<E> x){
    	for(int i=0;i<m;i++){
    		x[i].print();
    		cout<<" -> ";
    		ot(pro[i+1]);
    		cout<<endl;
    	}
    }
    bool mg(E &x,E &y){
    	int len=x.v.size();
    	for(int i=0;i<y.v.size();i++){
    		for(int j=0;j<len;j++){
    			if(y.v[i]==x.v[j]) return false;
    		}
    		x.v.push_back(y.v[i]);
    	}
    	return true;
    }
    void extd(){
    	for(int i=0;i<=99;i++){
    		for(int j=0;j<pth[i].size();j++){
    			for(int k=0;k<pth[i][j].v.size();k++){
    				int add=pth[i][j].v[k];
    				if(pth[add].size()==0) continue;
    				for(int l=0;l<pth[add].size();l++){
    					E nex=pth[i][j];
    					int p=nex.v[k];
    					nex.v.erase(nex.v.begin()+k);
    					if(mg(nex,pth[add][l])){
    						sort(nex.v.begin(),nex.v.end());
    						pth[i].push_back(nex);
    					}
    				}
    				
    			}
    		}
    	}
    }
    int main(){
    	//io_opt;
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>s;
    		c[i]=num(s);
    		w[c[i]]++;
    	}
    	cin>>m;
    	for(int i=1;i<=m;i++){
    		cin>>s;
    		pro[i]=num(s);
    	}
    	cin>>k;
    	for(int i=1;i<=k;i++){
    		E cur;
    		while(cin>>s){
    			int t=num(s);
    			if(t==-1) break;
    			if(t==-2) continue;
    			cur.v.push_back(t);
    		}
    		cin>>s;
    		int t=num(s);
    		pth[t].push_back(cur);
    	}
    	//extd();
    	for(int i=0;i<=99;i++){
    		E cur;
    		cur.v.push_back(i);
    		pth[i].push_back(cur);
    	}
    	dfs(1);
    	sort(ans.begin(),ans.end(),cmp);
    	//if(ans.size()>1) while(1);
    	output(ans[0]);
    	/*for(int i=0;i<ans.size();i++){
    		output(ans[i]);
    	}*/
    	return 0;
    }
    
  • 相关阅读:
    Swift实现单例
    UIViewContentMode说明
    打开或关闭Mac的隐藏文件的命令。
    struts2-2.3.20以上版本无法正常启动
    eclipse下导入jdk源码
    js 与css script
    eclipse导入jquery包后报错
    ${pageContext.request.contextPath} :JSP取得绝对路径方法
    小米暑期实习在线笔试2015-04-25
    android动态污点分析
  • 原文地址:https://www.cnblogs.com/sz-wcc/p/14090820.html
Copyright © 2011-2022 走看看