zoukankan      html  css  js  c++  java
  • Luogu P4907 A换B problem

    题目传送门

    暴力乱搞大法好!

    感觉这题难度有点虚,最多蓝题吧


    一开始写了个没有一丝剪枝的搜索交了上去,水到了(60pts)
    于是加了个卡时,就(A)

    顺便说一句,数据略水(可能也是因为乱搞不好卡吧)

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <ctime>
    #define LL long long
    using namespace std;
    LL read() {
    	LL k = 0, f = 1; char c = getchar();
    	while(c < '0' || c > '9') {
    		if(c == '-') f = -1;
    		c = getchar();
    	}
    	while(c >= '0' && c <= '9')
    		k = k * 10 + c - 48, c = getchar();
    	return k * f;
    }
    bool tong[5][100]; //tong[花色][点数]
    struct zzz {
    	int c, k;
    }a[100]; //c:花色,k:点数
    bool flag;
    int n, ans = 100, ans2 = 100, kti;
    bool judge() { //判断是否为顺子
    	int num = 0; bool flag2 = 1;
    	for(int i = 1; i <= 4; ++i) {
    		int minn = 100, maxn = 0;
    		for(int j = 1; j <= 13; ++j) {
    			if(tong[i][j] && minn == 100) minn = j;
    			if(tong[i][j]) maxn = max(maxn, j);
    		}
    		for(int j = minn; j <= maxn; ++j)
    			if(!tong[i][j]) flag2 = 0, ++num;
    	}
    	ans2 = min(ans2, num);
    	return flag2;
    }
    void dfs(int pos, int tot) {
    	if(tot >= ans) return ;
    	if(judge()) {
    		ans = min(ans, tot);
    		return ;
    	}
    	if(pos > n) return ;
    	//=====卡时
    	if((clock() - kti) * 1000 >= 980 * CLOCKS_PER_SEC){
        	if(ans <= 52) printf("Yes
    %d", ans);
    		else printf("No
    %d", ans2);
    		exit(0);
        }
        //=====
    	for(int i = 1; i <= 4; ++i) {
    		if(tong[i][a[pos].k] && i != a[pos].c) continue;
    		tong[a[pos].c][a[pos].k] = 0;
    		tong[i][a[pos].k] = 1;
    		if(i != a[pos].c) dfs(pos+1, tot+1);
    		else dfs(pos+1, tot);
    		tong[i][a[pos].k] = 0, tong[a[pos].c][a[pos].k] = 1;
    	}
    }
    int main() {
    	kti = clock(), n = read();
    	for(int i = 1; i <= n; ++i) {
    		a[i].c = read();
    		char c[2]; cin >> c;
    		if(c[0] == 'A') a[i].k = 1;
    		else if(c[0] == 'J') a[i].k = 11;
    		else if(c[0] == 'Q') a[i].k = 12;
    		else if(c[0] == 'K') a[i].k = 13;
    		else if(c[0] == '1') a[i].k = 10;
    		else a[i].k = c[0] - '0';
    	}
    	for(int i = 1; i <= n; ++i) tong[a[i].c][a[i].k] = 1;
    	dfs(1, 0);
    	if(ans <= 52) printf("Yes
    %d", ans);
    	else printf("No
    %d", ans2);
    	return 0;
    }
    
  • 相关阅读:
    现身说法“好奇心害死人啊”
    代码错误集合(全是低级错误,欢迎高手前来指教)
    Return from TAOKEE
    泡了DOUBAN一个下午,思考中。。。
    买了两本书
    PDFBox,PDF文件处理
    数据库营销,DM杂志
    一个JS写的时间选择显示的控件,源文件下载
    WEB2.0新想法,让明星还有你无所遁行,让你我都做“狗仔队”
    hdu 1237 简单计算器 (栈的简单应用)
  • 原文地址:https://www.cnblogs.com/morslin/p/11855666.html
Copyright © 2011-2022 走看看