2152: A Special Sorting
Status |
In/Out |
TIME Limit |
MEMORY Limit |
Submit Times |
Solved Users |
JUDGE TYPE |
 |
stdin/stdout |
3s |
8192K |
356 |
152 |
Standard |
Give you a sequence of words, can you sort them in dictionary order?
eg.
yes
accidental
baby
accept
accident
In dictionary order, those words should be printed as the following
accept
accident
accidental
baby
yes
But we will make an interesting rule this time. See your keyboard or the picture below:

there are ONLY 26 letters in lower-case we will use, and we assume that the letter above is bigger than the letter below, and the left is bigger than the right. For example, 'q' is bigger than 'a', 'c' is bigger than 'v'. So the example at the beginning whill be...
Input and Output
the input will only contain a sequence of words which is less than 1500. the output should print the sorted words each in a single line.
Sample Input
yes
accidental
baby
accept
accident
Sample Output
baby
accident
accidental
accept
yes
水題啊!
#include<iostream>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;
int Map[27];
struct M{
char s[30];
}S[1500];
char table[26]={'q','w','e','r','t','y','u','i','o','p','a','s','d',
'f','g','h','j','k','l','z','x','c','v','b','n','m'};
bool operator<(M a,M b)
{
int i=strlen(a.s);
int j=strlen(b.s);
if(i<j)
j=i;
for(int k=0;k<j;k++)
{
if(Map[(a.s[k])-'a']<Map[(b.s)[k]-'a'])
return false;
if(Map[(a.s[k])-'a']>Map[(b.s)[k]-'a'])
return true;
}
return i==j;//Èç¹ûabcd,abc,abcd<abc
}
void search(char key)
{
int i;
for(i=0;i<26;i++)
{
if(key==table[i])
{
Map[key-'a']=i;
break;
}
}
}
int main()
{
freopen("s.txt","r",stdin);
freopen("key.txt","w",stdout);
int i;
string t;
memset(S,0,sizeof(S));
for(i=0;i<26;i++)
{
search('a'+i);
}
i=0;
while(!cin.eof())
{
cin.getline(S[i++].s,30);//不能用cin>>s;否則runtime error
}
sort(S,S+i-1);
for(int j=0;j<i-1;j++)//必須用i-1,最后還有個空行。
cout<<S[j].s<<endl;
//system("PAUSE");
return 0;
}
奇怪的是在vc上能用
string s ;
while(cin>>s)
{};
在dev c++ 上不行。
后來才發現可以
string s ;
while(cin>>s)
{};
但是不能加 memset(S,0,sizeof(S));
posted on 2009-07-18 16:11
luis 閱讀(655)
評論(0) 編輯 收藏 引用 所屬分類:
格式.輸入輸出.數據類型