hdu 4272 LianLianKan

简介: 点击打开链接4272 题目意思:就是和平时玩的连连看类似,只是这里只能找距离小于6的。 解题思路: 1 map版 , 判断当前的水果的个数是否全为偶数 2vector版,直接模拟整个过程即可。

点击打开链接4272


题目意思:就是和平时玩的连连看类似,只是这里只能找距离小于6的。


解题思路

1 map版 , 判断当前的水果的个数是否全为偶数

2vector版,直接模拟整个过程即可


3代码:

vector版:

/*
用vector模拟:只要模拟整个删除的过程即可,中间注意vector迭代器的使用,如果v.erase(it),那么它将返回下一个迭代器这里注意。
*/
#include <algorithm>  
#include <iostream> 
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
#define MAXN 1010   
#define INF 0xFFFFFFF

int n;
vector<int>v;

void solve() {
    int flag, i;
    vector<int>::iterator it1, it2;
    while (1) {
        flag = 0;
        if (v.size() <= 1) break;/*只有一个元素的肯定不行*/
        it1 = v.begin();
        for (; it1 != v.end(); it1++) {
            for (it2 = it1 + 1, i = 1; i < 6 && it2 != v.end(); i++ , it2++) {
                if (*it1 == *it2) {
                    v.erase(it1);/*这里删除了it1后it2会往回移动一个*/
                    v.erase(it2-1);/*所以由上面的可知这里删除it2-1位置*/
                    flag = 1 ; break;
                }
            }
            if (flag) break;
        }
        if (!flag || !v.size()) break;/*如果flag为0或v为空退出*/
    }
    if (v.size()) printf("0\n");
    else printf("1\n");
}

int main() {
    //freopen("input.txt", "r", stdin);
    int tmp;
    while (scanf("%d", &n) != EOF) {
        v.clear();
        for (int i = 0; i < n; i++) {
            scanf("%d", &tmp);
            v.push_back(tmp);/*全部插入vector*/
        }
        solve();
    }
    return 0;
}

map版

/*
map版:
因为只要是能够消除的都可以选择,那么看下面这个例子
12
1 2 2 1 3 1 1 1 1 1 1 3
第一步消去 1 1得  2 2 3 1 1 1 1 1 1 3
第二步消去 2 2得  3 1 1 1 1 1 1 3
第三步由于两个3之间差距大于等于6,那么我们先消去1,得 3 1 1 1 1 3
第四步 消去3 3得 1 1 1 1 
......
那么从上面这个例子可以看出,并不是要求必须一个一个的消除过去,而是可以选择的。那么这样就可以知道只要相同的水果个数为偶数那么肯定是可以消去的,否则不行。
*/
 #include <algorithm>  
#include <iostream> 
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
#define MAXN 1010   
#define INF 0xFFFFFFF

int n , ans;
map<int , int>m;

void solve(){
    ans = 1;
    map<int , int>::iterator it;
    for(it = m.begin() ; it != m.end() ; it++){
        if((it->second)%2){/*判断it->second值是否全为偶数*/
           ans = 0 ; break;
        }   
    }
    printf("%d\n" , ans);
}

int main(){
    //freopen("input.txt", "r", stdin);
    int tmp;
    while(scanf("%d" , &n) != EOF){
        m.clear() ; map<int , int>::iterator it;
        for(int i = 0 ; i < n ; i++){
            scanf("%d" , &tmp);
            it = m.find(tmp);
            if(it != m.end()) m[tmp]++;/*找到则加1*/
            else m[tmp] = 1;/*没有找到则插入*/
        }
        solve();
    }
    return 0;
}



目录
相关文章
|
机器学习/深度学习 Java 算法
|
测试技术 Java
|
机器学习/深度学习
hdu 2604 Queuing
点击打开hdu 2604 思路: 递推+矩阵快速幂 分析; 1 根据题目的意思,我们可以求出F[0] = 0 , F[1] = 2 , F[2] = 4 , F[3] = 6 , F[4] = 9 , F[5] = 15 2 那么根据上面...
801 0
|
Java
HDU 1846(巴什博弈)
Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4050    Accepted Submission(s): 2644 Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫《勇敢者的游戏》(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻。
793 0