您的位置:首页 > 编程语言 > C语言/C++

【poj1002】487-3279 题解&代码(c++)

2017-06-15 22:51 453 查看
题目链接

http://poj.org/problem?id=1002

题解

一道比较简单的模拟题,看懂题意就行,感觉自己处理输出的地方有些狼狈,而且一道模拟题这么卡常真的好吗。。不过这道题也让我学到东西了:char数组在不知道长度的情况下如何枚举,具体看代码吧。

代码

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<map>
using namespace std;
int vis[100000000];
int n,flag;
long long a[100005];
char s[400];
int chang(char x)
{
if (x>='0'&&x<='9')
{
int tmp=x-'0';
return tmp;
}
if (x>='A'&&x<='C') return 2;
if (x>='D'&&x<='F') return 3;
if (x>='G'&&x<='I') return 4;
if (x>='J'&&x<='L') return 5;
if (x>='M'&&x<='O') return 6;
if (x>='P'&&x<='S') return 7;
if (x>='T'&&x<='V') return 8;
if (x>='W'&&x<='Y') return 9;
}
int main()
{
scanf("%d",&n);flag=0;
for (int i=1;i<=n;i++)
{
scanf("%s",s);
long long tmp=0;
for (int j=0;s[j];j++)//居然有这种操作吗!
if (s[j]=='-') continue;
else tmp=tmp*10+chang(s[j]);
vis[tmp]++;a[i]=tmp;
if (vis[tmp]>=2) flag=1;
}
if (!flag)
{
printf("No duplicates.\n");
return 0;
}
sort(a+1,a+1+n);
for (int i=1;i<=n;i++)
if (vis[a[i]]>=2)
{
int kk=1000000;int ans=a[i];
for (int j=1;j<=7;j++)
{
int tmp=ans/kk;ans%=kk;kk/=10;
printf("%d",tmp);
if (j==3) printf("-");
}
printf(" %d\n",vis[a[i]]);
vis[a[i]]=0;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 模拟