现在的位置: 首页 > 综合 > 正文

ZOJ_3501 Roman Order

2012年02月28日 ⁄ 综合 ⁄ 共 1183字 ⁄ 字号 评论关闭

  这题应该是个水题,可是我比题还水。。。TT,用map写的,存对应的roma数字时存错啦。。。正好在比赛,我晕,WA了两次,我的排名啊。。。TT

#include <iostream>
#include
<cstdio>
#include
<cstdlib>
#include
<map>

using namespace std;

map
<int, string> m;

struct roma
{
int x;
string s;
}roma[
10010];

void init()
{
m[
1] = "I";m[2] = "II";m[3] = "III";m[4] = "IV";
m[
5] = "V";m[6] = "VI";m[7] = "VII";m[8] = "VIII";
m[
9] = "IX";m[10] = "X";m[20] = "XX";m[30] = "XXX";
m[
40] = "XL";m[50] = "L"; m[60] = "LX"; m[70] = "LXX";m[80] = "LXXX";
m[
90] = "XC";m[100] = "C"; m[200] = "CC";m[300] = "CCC";
m[
400] = "CD"; m[500] = "D"; m[600] = "DC"; m[700] = "DCC";
m[
800] = "DCCC"; m[900] = "CM"; m[1000] = "M"; m[2000] = "MM";
m[
3000] = "MMM";
}

int cmp ( const void * a , const void * b )
{
struct roma *c = (struct roma *)a;
struct roma *d = (struct roma *)b;
return c->s > d->s;
}

int main()
{
//freopen("data.in", "r", stdin);

int t, n, i, f, tmp;
init();
string str;

while(scanf("%d", &t) != EOF)
{
while(t--)
{
scanf(
"%d", &n);
for(i = 0; i < n; i++)
{
scanf(
"%d", &f);
tmp
= f;
str.clear();
if(f/1000)
{
str
+= m[(f/1000)*1000];
f
%= 1000;
}
if(f/100)
{
str
+= m[(f/100)*100];
f
%= 100;
}
if(f/10)
{
str
+= m[(f/10)*10];
f
%= 10;
}
if(f)
{
str
+= m[f];
}
roma[i].x
= tmp;
roma[i].s.clear();
roma[i].s
= str;
}

qsort(roma, n,
sizeof(roma[0]), cmp);

for(i = 0; i < n-1; i++)
{
printf(
"%d ", roma[i].x);
//cout << roma[i].s << " " ;
}
printf(
"%d\n", roma[n-1].x);
//cout << roma[i].s << endl;
}
}
return 0;
}

抱歉!评论已关闭.