Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

过是过了,没有比我更烂的了,1260K 1842MS ,唉,那位大牛能帮我看看那里要改进的吗?求求你们了

Posted by 2004huangyimin at 2006-01-21 00:38:00 on Problem 1002
Source

Problem Id:1002  User Id:2004huangyimin 
Memory:1260K  Time:1842MS
Language:C++  Result:Accepted

Source 

#include < iostream >
#include < cstdlib >
#include < iomanip >
using namespace std;
class keypad
{
public:
	void Set ( char c1,char c2,char c3,char k );
	char k1 , k2 , k3;
	char key;
};

void keypad::Set( char c1,char c2,char c3,char k )
{
	k1 = c1;
	k2 = c2;
	k3 = c3;
	key = k;
}

class rec
{
public:
	int num;
	int fre;
};
int comp ( const void* a , const void* b ); 
int main()
{
	keypad k[8];
	k[0].Set( 'A' , 'B' , 'C' , '2' );
	k[1].Set( 'D' , 'E' , 'F' , '3' );
	k[2].Set( 'G' , 'H' , 'I' , '4' );
	k[3].Set( 'J' , 'K' , 'L' , '5' );
	k[4].Set( 'M' , 'N' , 'O' , '6' );
	k[5].Set( 'P' , 'R' , 'S' , '7' );
	k[6].Set( 'T' , 'U' , 'V' , '8' );
	k[7].Set( 'W' , 'X' , 'Y' , '9' );
	int n , i , j ,t, loc(0) , J ,m;
	int *c;
	rec *record ;
	char phone[7];
	char tel[7] , temp ;
	cin >> n;
	record = new rec [n];
	c = new int [n];
	for ( i = 0;i < n; i++ )
	{
		record[i].num = record[i].fre = 0;
	}

	for ( J = 0; J < n; J++ )
{
		for ( j = 0;j < 7; )
		{
			cin >> temp;
			if ( temp != '-' )
			{
				tel[j] = temp;
				j++;
			}
		}
		for ( i = 0;i < 7;i++ )
		{
			if ( tel[i] >= 'A' )
			{
				for( j = 0;j < 8; j++ )
				{
				if ( k[j].k1 == tel[i]||k[j].k2 == tel[i]||k[j].k3 == tel[i] )
				{ phone[i] = k[j].key; break;}
				}
			}
			else 
			{
			phone[i] = tel[i];
			}
		}
		t = atoi( phone );
		c[J] = t;
}
		qsort( c , n , sizeof(int) , comp);
	for ( i = 0;i < n; )
	{
		record[i].num = c[i];
		for ( j = i;record[i].num == c[j]&& j < n;j++ ){ record[i].fre++; }
		if ( record[i].fre > 1 )
		{
			t = record[i].num / 10000;
			m = record[i].num % 10000;
			cout <<setfill('0')<<setw(3)<<t <<'-';
			cout <<setfill('0')<<setw(4)<<m<<' '<<record[i].fre<<endl;
			loc = 1;
		}
		i = j;
	}
		if ( loc == 0 ){ cout <<"No duplicates."<<endl;}
		delete []record;
		delete []c;
	return 0;
}
int comp ( const void* a , const void* b )
{
	 return *((int*)a) - *((int*)b);
	
}


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator