| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
谢谢大家,终于过了,有几点经验和原代码:一:C比C++高魈!
二:调用的STL快排看起来不好,但比自己写的快排要好的多!
三:有些东西并不是算法错,而是你工具选的好不好
4:谢谢大家,谢谢谢谢,老宋,你太牛了!
Source
Problem Id:1002 User Id:yuenyun
Memory:440K Time:781MS
Language:C++ Result:Accepted
Source
//调用C的输入输出,但用库函数的快排
#include <iostream>
#include <stdlib.h>
//#include <search.h>
using namespace std;
int a[100000];
char b[40];
int cmp(const void *t1,const void *t2)
{int *a,*b;
a=(int *)t1; b=(int *)t2;
if (*a>*b) return 1;
if (*a<*b) return -1;
return 0;
}
void main()
{
int num;
// cin>>num;
scanf("%d",&num);
if (num<2)
{
// cin>>b;
scanf("%s",b);
// cout<<"No duplicates.";
printf("No duplicates.");
}
else
{
for (int i=0;i<num;i++)
{
// cin>>b;
scanf("%s",b);
int result=0;
for (int j=0;j<strlen(b);j++)
{
switch(b[j])
{
case('A'):
case('B'):
case('C'):
{
b[j]='2';
break;
}
case('D'):
case('E'):
case('F'):
{
b[j]='3';
break;
}
case('G'):
case('H'):
case('I'):
{
b[j]='4';
break;
}
case('J'):
case('K'):
case('L'):
{
b[j]='5';
break;
}
case('M'):
case('N'):
case('O'):
{
b[j]='6';
break;
}
case('P'):
case('R'):
case('S'):
{
b[j]='7';
break;
}
case('T'):
case('U'):
case('V'):
{
b[j]='8';
break;
}
case('W'):
case('X'):
case('Y'):
{
b[j]='9';
break;
}
}
if (b[j]>='0' && b[j]<='9')
{
result=10*result+b[j]-('1'-1);
}
}
a[i]=result;
}
qsort(a,num,sizeof(int),cmp);
int flag=0; //是否是不存在有重复的串
int pp=0;
while(pp<num) //记数指针pp遍历num一遍而已,不算多吧
{
int sum=1;
int i=1;
while(a[pp]==a[pp+i]) //只是记录重复的串个数,其并不重复记,因为它往后移动时,PP会动所以
//其外部循环并没有累计记数,即它和外部大循环在一起才记了NUM次;
{
i++;
sum++;
}
if (sum>1) //如果记数值大于1那么就输出;
{
int x1=a[pp]/10000; //前3位
int y1=a[pp] % 10000; //后4位
if (x1>99) //如果前三位不足,看其有几位之前用0补足3位;
// cout<<x1<<"-";
printf("%d-",x1);
else if (x1>9)
// cout<<"0"<<x1<<"-";
printf("0%d-",x1);
// printf("%d",x1);
// printf("-");
else
// cout<<"00"<<x1<<"-";
printf("00%d-",x1);
// printf("%d-",x1);
if (y1>999) //如果后4位不足,看其有几位用0补足4位;
// cout<<y1<<" "<<sum<<endl;
printf("%d %d\n",y1,sum);
else if (y1>99)
// cout<<"0"<<y1<<" "<<sum<<endl;
printf("0%d %d\n",y1,sum);
else if (y1>9)
// cout<<"00"<<y1<<" "<<sum<<endl;
printf("00%d %d\n",y1,sum);
else if (y1>=0)
// cout<<"000"<<y1<<" "<<sum<<endl;
printf("000%d %d\n",y1,sum);
flag=1; //只要有一组多于2个的串就将标志FLAG为1;
}
pp=pp+i;
}
if (flag==0) //整个大循环完了后,看FLAG如为0则输出。。。
// cout<<"No duplicates.";
printf("No duplicates.");
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator