Hatena::Grouptopcoder

kojingharangの日記 RSSフィード

 | 

2011-05-21

A. RPI

04:19 |  A. RPI - kojingharangの日記 を含むブックマーク はてなブックマーク -  A. RPI - kojingharangの日記  A. RPI - kojingharangの日記 のブックマークコメント

  • チームリーグの勝敗結果(よくあるマトリックス)がある。
  • RPI なる指標を計算する。
int main()
{
	int T;
	cin>>T;
	//cout<<T<<endl;
	REP(t, T)
	{
		int N;
		cin>>N;
		string sc[N];
		double WP[N];
		double OWP[N];
		double OOWP[N];
		CLR(WP);
		CLR(OWP);
		CLR(OOWP);
		REP(i, N){ cin>>sc[i]; }
		REP(i, N)
		{
			{
				int win=0, all=0;
				REP(j, N)
				{
					if(sc[i][j]!='.')
					{
						win += sc[i][j]=='1';
						all++;
					}
				}
				WP[i] = (double)win/all;
			}
			{
				int _all=0;
				REP(j, N)
				{
					if(sc[i][j]!='.')
					{
						_all++;
						// calc wp of j except i
						int win=0, all=0;
						REP(k, N)
						{
							if(k==i) continue;
							if(sc[j][k]!='.')
							{
								win += sc[j][k]=='1';
								all++;
							}
						}
						OWP[i] += (double)win/all;
					}
				}
				OWP[i] /= (double)_all;
			}
		}
		cout<<"Case #"<<t+1<<":"<<endl;
		REP(i, N)
		{
			int all=0;
			REP(j, N)
			{
				if(sc[i][j]!='.')
				{
					OOWP[i] += OWP[j];
					all++;
				}
			}
			OOWP[i] /= all;
			double RPI = 0.25 * WP[i] + 0.50 * OWP[i] + 0.25 * OOWP[i];
			cout<<RPI<<endl;
		}
		cout<<endl;
	}
	return 0;
}

 |