SRM 453 div2

Posted on 2009-11-18 15:24 rikisand 阅读(218) 评论(0)  编辑 收藏 引用 所属分类: TopcoderAlgorithm

半夜12:00的比赛,开始就发现系统很慢,结果第一题没法提交,然后退出重进退出重进·····server down·····

想起洗的衣服还没拿,于是跑下去取衣服,看了会dota vod ,重新登入,比赛竟然继续·····交了500 开始看1000 没思路,冻死了。

challenge没啥意思,都没人在,250的太弱智都对的····由于中间出错,这次srm not rated~~

250 pt 略过

500 pt

John and Brus have an interest in team sports tournaments. They are currently investigating a basketball tournament. Basketball is a team sport in which two teams of five players try to score points against one another by placing a ball through a ten foot high hoop. Basketball is one of the most popular and widely viewed sports in the world.

There are n teams in the tournament. Each pair of teams plays exactly two games against each other. In the first of these games, one of the teams is the host, and in the second, the other team is the host. Each game results in one team winning. There are no draws. After the tournament is over, the team with the highest total number of wins is crowned the winner.

The tournament is currently in progress and the current results are described in the vector <string> table. For each pair of distinct indices, i and j, the j-th character of the i-th element of tableis the result of the game where team i hosted team j. The result is 'W' if team i won, 'L' if team i lost, and '?' if the game hasn't been played yet. Assuming that every possible outcome is possible for the games that haven't been played yet, return the minimal number of total wins the tournament winner can have at the end of the tournament.

Definition

Class:
TheBasketballDivTwo

Method:
find

Parameters:
vector <string>

Returns:
int

Method signature:
int find(vector <string> table)

(be sure your method is public)

Constraints

-
table will contain between 2 and 5 elements, inclusive.

-
Each element of table will contain exactly n characters, where n is the number of elements in table.

-
The j-th character of the i-th element of table, where i and j are different, will be 'W', 'L', or '?'.

-
The i-th character of the i-th element of table will be 'X'.

 

数据量很小,找到未比的比赛场次 ,然后枚举各种输赢情况,更新解就可以了。或者循环2^n次,或者递归调用

1000 pt

n this tournament, each game results in either a victory for one team or a draw. If a team wins a game, it gains three points and its opponent gains no points. In case of a draw, each team gains one point. The score of a team is the sum of all the points it has gained from all its games. Each pair of teams can play against each other any number of times.

You are given a vector <int> points representing the current standings in the tournament. The i-th element of points is the score of the i-th team. You can assume that the points represent a valid state, i.e., intermediate standings that can be achieved in a tournament according to the rules described above.

Each team will play exactly one more game in the tournament, but it is not known what the matchups will be. After the tournament is over, the teams will be ranked by score. 1st place will go to the team with the highest score, 2nd place will go to the team with the second highest score, and so on. If two teams have the same score, the team with the lower number will place higher. For example, if team 0 and team 3 each have the highest score of 100 points, then team 0 will place 1st and team 3 will place 2nd.

John's favorite team is team 0, and he wants it to place as high as possible. Assuming that the remaining games can be scheduled arbitrarily and can end with any possible outcome, return the highest possible place for team 0 at the end of the tournament.

Definition

Class:
TheSoccerDivTwo

Method:
find

Parameters:
vector <int>

Returns:
int

Method signature:
int find(vector <int> points)

(be sure your method is public)

Constraints

-
points will contain between 2 and 50 elements, inclusive.

-
points will contain an even number of elements.

-
Each element of points will be between 0 and 1,000,000, inclusive.

-
points will represent a valid state.

Examples

Code Snippet
int find(vector <int> p )
{
     int E3=0,A3=0,L3=0,L=0;
     int d=p[0];
     for(int i=1;i<p.size();i++){
        if(p[i]>d+3)A3++;
        else if(p[i]==d+3)E3++;
        else if (p[i]>d)L3++;
        else L++;
     }
     if(A3+L+1>=E3)
         return A3+1;
     return A3+1+(E3-A3-L)/2;
}

 

 

 

因为每队只剩下一场比赛,所以题目变得很简单。0队最后一轮肯定是取到3分,比0队多3场以上比赛的 肯定比0队靠前,比0队分少或者相等的一定在0队之后,剩下的就是我们要考虑的了。如果A3+L+1>=E3 也就是说比0队多胜一场的队伍,如果让他们在最后一轮都输,那么0队可以获得最好成绩 A3+1;

然而如果不行剩下的这些E3要有一半(E3+1)/2个要得到3分从而比0队高,over~


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理