poj.org --map-- 1002

#include <iostream>
#include <map>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
map<string,int> my;
char a[30]="2223334445556667777888999";
int main(int argc, char *argv[])
{
    int n,i,j,sum; char ss[1005],s[1005];
    while(scanf("%d",&n)!=EOF)
    {
        my.clear(); sum=0;
        while(n--)
        {
            scanf("%s",ss);
            for(j=i=0;i<strlen(ss);i++)
            {
                if(j==3)  s[j++]=‘-‘;
                if(ss[i]>=‘A‘&&ss[i]<=‘Z‘)  s[j++]=a[ss[i]-‘A‘];
                else if(ss[i]!=‘-‘) s[j++]=ss[i];
            }
            s[j]=0;
            my[s]++;
        }
        map<string,int> ::iterator it;
        for(it=my.begin();it!=my.end();it++)
        {
            if((*it).second>1) {cout<<(*it).first; printf(" %d\n",(*it).second); sum++;}
        }
        if(!sum) printf("No duplicates.\n");
    }
    return 0;
}

#include <iostream>
#include <map>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
map<string,int> my;
char a[30]="2223334445556667777888999";
int main(int argc, char *argv[])
{
	int n,i,j,sum; char ss[1005],s[1005];
	while(scanf("%d",&n)!=EOF)
	{
		my.clear(); sum=0;
		while(n--)
		{
			scanf("%s",ss);
			for(j=i=0;i<strlen(ss);i++)
			{
				if(j==3)  s[j++]=‘-‘;
				if(ss[i]>=‘A‘&&ss[i]<=‘Z‘)  s[j++]=a[ss[i]-‘A‘];
				else if(ss[i]!=‘-‘) s[j++]=ss[i];
			}
			s[j]=0;
			my[s]++;
		}
		map<string,int> ::iterator it;
		for(it=my.begin();it!=my.end();it++)
		{
			if((*it).second>1) {cout<<(*it).first; printf(" %d\n",(*it).second); sum++;}
		}
		if(!sum) printf("No duplicates.\n");
	}
	return 0;
}

poj.org --map-- 1002,布布扣,bubuko.com

时间: 2024-10-11 23:07:25

poj.org --map-- 1002的相关文章

poj水题-1002 STL是神器,得用啊

很简单的一个,就是总超时.问题出在我使用的短平快,简单直接的方式已经不灵了. 这种情况我总结以下原因: 1.尽量用STL模板容器,qsort()等内置,他们优化得很好 2.不用的话需要了解哈希算法. 本题用了快排与哈希,自己写也行(麻烦),不写的话用qsort与STL map,否则超时.我用的当然是模板,短平快解决战斗. #include <iostream> #include <map> #include <string> using namespace std; s

POJ 2296 Map Labeler(2-sat)

POJ 2296 Map Labeler 题目链接 题意: 坐标轴上有N个点,要在每个点上贴一个正方形,这个正方形的横竖边分别和x,y轴平行,并且要使得点要么在正方形的上面那条边的中点,或者在下面那条边的中点,并且任意两个点的正方形都不重叠(可以重边).问正方形最大边长可以多少? 思路:显然的2-sat问题,注意判断两个矩形相交的地方,细节 代码: #include <cstdio> #include <cstring> #include <cstdlib> #incl

poj 2296 Map Labeler【二分+2-set】【经典】

题目:poj 2296 Map Labeler 题意:给出以下二维坐标点,然后让你往平面上放正方形,点必须落在正方形上面边的中点或者下面边的中点,正方形不能重叠,可以共用边.问最大正方形边的边长. 分析:这种最大化最小值或者最小化最大值的问题,我们都可以种二分+判断的方法来解,这个也不例外,关键是判断部分 我们现在二分枚举边长为diff,然后所有的点就变成了在正方形上面或者下面的问题了,二选一的问题很明显可以用2-set来判断的 这个题目的关键在于理解他们之间的二元关系并建图,下面我们来分析 首

POJ 2503-Babelfish(map)

题目地址:POJ 2503 题意:输入一个字典,字典格式为"英语 外语"的一一映射关系然后输入若干个外语单词,输出他们的 英语翻译单词,如果字典中不存在这个单词,则输出"eh". 思路:用map存取外语和英语的映射关系,然后找就好了.注意输入格式. #include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include

POJ 2296 Map Labeler

二分答案 + 2-SAT验证,判断正方形是否相交写起来有点烦,思路还是挺简单的. #include<cstdio> #include<cstring> #include<cmath> #include<stack> #include<queue> #include<algorithm> using namespace std; const int maxn=1005; struct Point { double x,y; }p[max

POJ 2296 Map Labeler(二分边长+2-sat判解)(经典题)

题意:给你n个点,要你在这n个点上放一个正方形,点只能在正方形的上边或下边的中点上,所有正方形大小一样, 不能重叠,求最大的正方形. 经典的题目,找约束关系要经过一些讨论. //320 KB 16 ms #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N = 222; int n; struct n

poj 1745 Divisibility(DP)

最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大. Input 输入数据的第一行为一个正整数T,表示有T组测试数据.每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y

【图论】2-sat总结

2-sat总结 2-sat问题,一般表现的形式为.每一个点有两种方式a,b,要么选a,要么选b.而且点点之间有一些约束关系.比如:u和v至少一个选a.那么这就是一个表达式.把a当成真,b当成假,那就是u真或v真.2-sat的题目就是这样.给定这些约束,推断是否会矛盾 注意表达式的转化形式,(事实上就是离散数学中那几种转换方式) 比方(u真且v真)或(u假且v假)就能够转化成(u真或v假)且(u假或v真),这样就能建立关系 2-sat中的原理,事实上和2染色是一样的,把每一个结点拆分成一个真结点和

find the safest road(弗洛伊德)

http://acm.hdu.edu.cn/showproblem.php?pid=1596 #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; int n; int ss,ee; double map[1002][1002]; void F() { for(int k=1;k<=n;k++) { for(

【图论】

2-sat总结 2-sat问题,一般表现的形式为,每个点有两种方式a,b,要么选a,要么选b,并且点点之间有一些约束关系,例如:u和v至少一个选a,那么这就是一个表达式,把a当成真,b当成假,那就是u真或v真,2-sat的题目就是这样,给定这些约束,判断是否会矛盾 注意表达式的转化形式,(其实就是离散数学中那几种转换方式) 比如(u真且v真)或(u假且v假)就可以转化成(u真或v假)且(u假或v真),这样就能建立关系 2-sat中的原理,其实和2染色是一样的,把每个结点拆分成一个真结点和一个假结