お年玉を奪う
3265 ワード
1お年玉を奪う(25分)お年玉を奪ったことがない人はいないでしょう.
入力形式:
最初の行に入力すると、正の整数NN(le 10^4≦10 4)が与えられます.すなわち、お年玉を出すこととお年玉を奪うことに参加する人数の合計は、1からNN番号になります.次にNN行、ii行目はiiと番号付けされた人がお年玉を出す記録を与え、フォーマットは以下の通りである.
K\quad N_1\quad P_1\quad\cdots\quad N_K\quad P_KKN 1 P 1 ⋯N K P K
そのうちKK(0le Kle 200≦K≦20)はお年玉の個数で、N_iN iはお年玉を奪った人の番号で、P_iP i(>0>0)は、現金入り封筒の金額(分割単位)です.注意:同じ人が出したお年玉については、一人当たり最大1回しか奪うことができず、繰り返し奪うことはできません.
出力フォーマット:
所得金額が高い順から低い順に各人の番号と所得金額(元単位で小数点以下2桁)を出力します.1人あたりの情報は1行で、2つの数字の間に1つのスペースがあります.収入金額が並んでいる場合は、現金入り封筒を奪った個数で出力を減らします.並列がある場合は、個人番号で出力を増やします.
サンプルを入力:
10 3 2 22 10 58 8 125 5 1 345 3 211 5 233 7 13 8 101 1 7 8800 2 1 1000 2 1000 2 4 250 10 320 6 5 11 9 22 8 33 7 44 10 55 4 1 3 8800 2 1 23 2 123 1 8 250 4 2 121 4 516 7 112 9 10出力サンプル:
1 11.63 2 3.63 8 3.63 3 2.11 7 1.69 6 -1.67 9 -2.18 10 -3.26 5 -3.26 4 -12.32
入力形式:
最初の行に入力すると、正の整数NN(le 10^4≦10 4)が与えられます.すなわち、お年玉を出すこととお年玉を奪うことに参加する人数の合計は、1からNN番号になります.次にNN行、ii行目はiiと番号付けされた人がお年玉を出す記録を与え、フォーマットは以下の通りである.
K\quad N_1\quad P_1\quad\cdots\quad N_K\quad P_KKN 1 P 1 ⋯N K P K
そのうちKK(0le Kle 200≦K≦20)はお年玉の個数で、N_iN iはお年玉を奪った人の番号で、P_iP i(>0>0)は、現金入り封筒の金額(分割単位)です.注意:同じ人が出したお年玉については、一人当たり最大1回しか奪うことができず、繰り返し奪うことはできません.
出力フォーマット:
所得金額が高い順から低い順に各人の番号と所得金額(元単位で小数点以下2桁)を出力します.1人あたりの情報は1行で、2つの数字の間に1つのスペースがあります.収入金額が並んでいる場合は、現金入り封筒を奪った個数で出力を減らします.並列がある場合は、個人番号で出力を増やします.
サンプルを入力:
10 3 2 22 10 58 8 125 5 1 345 3 211 5 233 7 13 8 101 1 7 8800 2 1 1000 2 1000 2 4 250 10 320 6 5 11 9 22 8 33 7 44 10 55 4 1 3 8800 2 1 23 2 123 1 8 250 4 2 121 4 516 7 112 9 10出力サンプル:
1 11.63 2 3.63 8 3.63 3 2.11 7 1.69 6 -1.67 9 -2.18 10 -3.26 5 -3.26 4 -12.32
#include
#include
#include
using namespace std;
struct node
{
int name;
int shu;
int he;
} s[10001];
int cmp(node s1,node s2)
{
if(s1.he!=s2.he)
{
return s1.he>s2.he;
}
else if(s1.shu!=s2.shu)
{
return s1.shu>s2.shu;
}
else
{
return s1.nameint main()
{
int x,n,a,b;
cin>>n;
for(int i=1 ; i<=n ; i++)
{
s[i].name = i;
}
for(int i=1 ; i<=n ; i++)
{
cin>>x;
while(x--)
{
scanf("%d%d",&a,&b);
s[i].he-=b;
s[a].he += b;
s[a].shu++;
}
}
sort(s+1,s+n+1,cmp);
for(int i=1 ; i<=n ; i++)
{
printf("%d %.2f
",s[i].name,(double)s[i].he/100.00);
}
return 0;
}