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

#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] 1671 History of Languages

    题目描述 输入两个DFA,判断是否等价. https://uva.onlinejudge.org/external/16/1671.pdf 输入 第一行T 可以接受的字母表 第二行N 状态数 接下去N ...

  2. UVA 10887 Concatenation of Languages 字符串hash

    题目链接:传送门 题意: 给你两个集合A,B,任意组合成新的集合C(去重) 问你最后C集合大小 题解: 暴力 组成的新串hash起来 #include<bits/stdc++.h> usi ...

  3. OJ题解记录计划

    容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001  A+B Problem First AC: 2 ...

  4. 2534: Uva10829L-gap字符串

    2534: Uva10829L-gap字符串 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 66[Submit][Statu ...

  5. 几道hash题

    1: UVa 10887 - Concatenation of Languages map 可以做 ,但是输入实在恶心,有空串之类的HASH模板: int Hash(char *s){   int s ...

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

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

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

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

  8. 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 ...

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

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

随机推荐

  1. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  2. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

  3. echarts+php+mysql 绘图实例

    最近在学习php+mysql,因为之前画图表都是直接在echart的实例demo中修改数据,便想着两相结合练习一下,通过ajax调用后台数据画图表. 我使用的是echart3,相比较第二版,echar ...

  4. 邮件中嵌入html中要注意的样式

    工作中常会有需求向用户发送邮件,需要前端工程师来制作html格式的邮件,但是由于邮件客户端对样式的支持有限,要兼容很多种浏览器需要注意很多原则: 1.邮件使用table+css布局 2.邮件主要部分在 ...

  5. gulp初学

    原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js  配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...

  6. python 数据类型 ----字典

    字典由一对key:value 组成的 python中常用且重量级的数据类型 1. key , keys, values 字典由一对key:value 组成的 python中常用且重量级的数据类型 1. ...

  7. JDBC增加删除修改

    一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...

  8. arcgis api for js入门开发系列六地图分屏对比(含源代码)

    上一篇实现了demo的地图标绘模块,本篇新增地图地图分屏对比模块,截图如下(源代码见文章底部): 对效果图的简单介绍一下,在demo只采用了两分屏对比,感兴趣的话,可以在两分屏的基础上拓展,修改css ...

  9. vim+vundle配置

    Linux环境下写代码虽然没有IDE,但通过给vim配置几个插件也足够好用.一般常用的插件主要包括几类,查找文件,查找符号的定义或者声明(函数,变量等)以及自动补全功能.一般流程都是下载需要的工具,然 ...

  10. Ubuntu1604下安装Liggghts及CFDEM Coupling

    部分内容参考http://www.linuxdiyf.com/linux/16315.html LIGGGHTS是一款开源的DEM软件,来自于著名的分子动力学软件LAMMPS,目前借助于CFDEM C ...