难点在于:递归函数和输出;

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
class Rank{
private:
    int length,width,ans=0;
    char c;
    vector <char> v;
    int a[26][1000];
    map <char,int> m;  //output
    char field[1000][1000];
public:
    void Readcase(){
        cin>>width>>length;
        for(int i=0;i<width;i++){
            for(int j=0;j<length;j++){
                cin>>field[i][j];
            }
        }
    }
    void Computing(){
        for(int i=0;i<width;i++)
            for(int j=0;j<length;j++){
                vector<char>::iterator it=find(v.begin(),v.end(),field[i][j]);
                if(it!=v.end()) continue;   //找到了
                else v.push_back(field[i][j]);
            }
        for(int i=0;i<v.size()-1;i++)
            if(v[i]>v[i+1]) swap(v[i],v[i+1]);
        for(int k=0;k<v.size();k++){
            c=v[k];
            for(int i=0;i<width;i++){
                for(int j=0;j<length;j++){
                    if(field[i][j]==c){
                        dfs(i,j);
                        ans++;
                    }
                }
            }
            m.insert(map<char,int>::value_type(c,ans));
            ans=0;
        }
    }
    void Output(){
        int l=m.size(),max;
        map<char,int>::iterator it3;
        while(l--){
            max=m.begin()->second;
            for(map<char,int>::iterator it2=m.begin();it2!=m.end();it2++){
                if(it2->second>max) max=it2->second;
            }
            for(it3=m.begin();it3!=m.end();it3++){
                if(max==it3->second) break;
            }
            cout<<it3->first<<": "<<it3->second<<endl;
            m.erase(it3);
        }
    }
    void dfs(int x,int y){
        field[x][y]='*';  //标记这个地方已经找过了
        if(0<=x&&x<width&&0<=y&&(y-1)<length&&field[x][y-1]==c){
            dfs(x,y-1);
        }
        if(0<=x&&x<width&&0<=y&&(y+1)<length&&field[x][y+1]==c){
            dfs(x,y+1);
        }
        if(0<=(x+1)&&(x+1)<width&&0<=y&&y<length&&field[x+1][y]==c){
            dfs(x+1,y);
        }
        if(0<=(x-1)&&(x-1)<width&&0<=y&&y<length&&field[x-1][y]==c){
            dfs(x-1,y);
        }
    }
};
int main()
{
    int cases;
    cin>>cases;
    for(int i=1;i<=cases;i++){
        Rank r;
        r.Readcase();
        r.Computing();
        cout<<"World #"<<i<<endl;
        r.Output();
    }
    return 0;
}

UVA, 10336 Rank the Languages的更多相关文章

  1. UVa 112 - Tree Summing(树的各路径求和,递归)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  2. 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。

    这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...

  3. uva 387 A Puzzling Problem (回溯)

     A Puzzling Problem  The goal of this problem is to write a program which will take from 1 to 5 puzz ...

  4. Uva 120 - Stacks of Flapjacks(构造法)

    UVA - 120  Stacks of Flapjacks Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld &a ...

  5. UVA - 1103Ancient Messages(dfs)

    UVA - 1103Ancient Messages In order to understand early civilizations, archaeologists often study te ...

  6. UVA 1160 - X-Plosives 即LA3644 并查集判断是否存在环

    X-Plosives A secret service developed a new kind ofexplosive that attain its volatile property only ...

  7. uva 1401 dp+Trie

    http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. UVA 12206 - Stammering Aliens(后缀数组)

    UVA 12206 - Stammering Aliens 题目链接 题意:给定一个序列,求出出现次数大于m,长度最长的子串的最大下标 思路:后缀数组.搞出height数组后,利用二分去查找就可以 这 ...

  9. Hacker Rank: Two Strings - thinking in C# 15+ ways

    March 18, 2016 Problem statement: https://www.hackerrank.com/challenges/two-strings/submissions/code ...

随机推荐

  1. iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流

    上篇博客的实例是自带的UICollectionViewDelegateFlowLayout布局基础上来做的Demo, 详情请看<iOS开发之窥探UICollectionViewControlle ...

  2. 802.11MAC基础

    做无线网络测试已经大半年了,在这过程中发现<802.11权威指南>真是以本好书,在这里分享一下学习到的知识,也帮助我记忆. 1.MAC: mac(媒介访问控制层),它位于物理层之上,控制着 ...

  3. 转载-V.I.Arnold, beyond a mathematician

    转自-http://blog.renren.com/blog/248100754/471276636 在AMS的首页上找到了三条讣告,依次是V.I.Arnold(1937-2010),W.Rudin( ...

  4. Javac 手动编译时,出现乱码或编码格式问题

    使用Javac进行手动编译时,出现乱码或编码格式问题,原因如下:现象:编译时出现乱码或编译错误 即使改成UTF-8仍然会出错 原因如下:某些编辑器会往utf8文件中添加utf8标记(editplus称 ...

  5. c++ 文件读写模板

    #include <fstream> using namespace std; int main() { ifstream fin("in.txt"); ofstrea ...

  6. 字符串和json之间的互相转化

    在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法. JSON.stringify(obj)将JSO ...

  7. resharper安装后,一不小心点错了(选择了object browser)

    打开Resharper,选择Options,然后选择Tools中的External Sources,你的情况是选择了Navigation to Object Brower这一项了,换成第一个Defau ...

  8. firefox渗透师必备的利器

    工欲善必先利其器,firefox一直是各位渗透师必备的利器,小编这里推荐34款firefox渗透测试辅助插件,其中包含渗透测试.信息收集.代理.加密解密等功能. 1:Firebug Firefox的 ...

  9. c#反射机制学习和利用反射获取类型信息

    反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...

  10. 主成分分析(principal components analysis, PCA)——无监督学习

    降维的两种方式: (1)特征选择(feature selection),通过变量选择来缩减维数. (2)特征提取(feature extraction),通过线性或非线性变换(投影)来生成缩减集(复合 ...