zoukankan      html  css  js  c++  java
  • 21.09.12模拟 P2809 hzwer 爱折纸

    显然是暴力模拟。。好难写
    vector+map判重即可,其实也不难写,考试的时候没想到。。

    #include<iostream>
    #include<map>
    #include<ctime>
    #include<vector>
    #include<cstdio>
    #define rep(i,j,k) for(register int i(j);i<=k;++i)
    #define drp(i,j,k) for(register int i(j);i>=k;--i)
    #define bug cout<<"~~~~~~~~~~~~~"<<'
    ';
    #define bugout(x) cout<<x<<endl;
    typedef long long lxl;
    template<typename T>
    inline T  max(T a, T b) {
    	return a > b ? a : b;
    }
    template<typename T>
    inline T  min(T &a, T &b) {
    	return a < b ? a : b;
    }
    template<typename T>
    inline void swap(T &a, T &b) {
    	T c;
    	c = a;
    	a = b;
    	b = c;
    }
    
    using std::cin;
    using std::ios;
    using std::cout;
    const int N = 17;
    int n, m, x, L, ok;
    
    std::map< std::vector<int>, bool> mp;
    std::vector<int> a, goal;
    
    inline std::vector<int> fold(int pos, std::vector<int> &v) {
    	std::vector<int >u;
    	u.push_back(0);
    	int l = v.size() - 1;
    	int t = max(pos, l - pos);
    	drp(i, t, 1) {
    		int z = 0;
    		if(pos - i + 1 > 0) z += v[pos - i + 1];
    		if(pos + i <= l) z += v[pos + i];
    		u.push_back(z);
    	}
    	return u;
    }
    
    inline bool equal(const std::vector<int> &v) {
    	rep(i, 1, m) {
    		if(v[i] != goal[i]) return false;
    	}
    	return true;
    }
    
    inline void dfs(std::vector<int> v) {
    	if(ok) return ;
    	if(mp.find(v) != mp.end()) return ;
    	mp[v] = 1;
    	int l = v.size() - 1;
    	if(l == L) {
    		if(equal(v)) ok = 1;
    	}
    	rep(i, 0, l) {
    		dfs(fold(i, v));
    	}
    }
    
    int main() {
    	freopen("fold.in", "r", stdin);
    	freopen("fold.out", "w", stdout);
    	ios::sync_with_stdio(false);
    	while(cin >> n) {
    		a.clear();
    		goal.clear();
    		a.push_back(0);
    		goal.push_back(0);
    		mp.clear();
    		rep(i, 1, n) {
    			cin >> x;
    			a.push_back(x);
    		}
    		cin >> m;
    		rep(i, 1, m) {
    			cin >> x;
    			goal.push_back(x);
    		}
    		L = goal.size() - 1;
    		ok = 0;
    		dfs(a);
    		puts(ok ? "S" : "N");
    	}
    	return 0;
    }
    

    本文来自博客园,作者:{2519},转载请注明原文链接:https://www.cnblogs.com/QQ2519/p/15376215.html

  • 相关阅读:
    Java package和import
    2文本
    dotnet学习制表技巧
    视频教程:小型登陆系统(五)
    读书札记:ASP.NET网站管理工具遇到错误。请返回上一页并重试
    视频教程:小型登陆系统(三)
    视频教程:小型登陆系统(四)
    视频教程:小型登陆系统(二)
    视频教程:小型登陆系统(一)
    视频教程:小型登陆系统(完)
  • 原文地址:https://www.cnblogs.com/QQ2519/p/15376215.html
Copyright © 2011-2022 走看看