首页 > 专题系列 > Java解POJ > POJ 3138 ACM Team Selection [解题报告] Java
2013
11-12

POJ 3138 ACM Team Selection [解题报告] Java

ACM Team Selection

问题描述 :

The ACM-ICPC brings together the top student programmers from all over the world, and provides them with opportunities to develop critical skills which will give them a competitive edge when they launch careers in information technology areas. More than 5,600 teams from 84 countries had competed in regional contests last year. An ever larger number of teams – more than 7,000 teams from different countries worldwide – have registered in this year’s regional contests. However, due to the limited capacity of each site, only a small amount of the registered teams can be allowed to participate in the on-site contest. It is really hard for the contest organizers to determine which teams should be allowed to participate. One of the possible solutions is to hold a preliminary internet contest before the on-site competition. The following part describes a simplified version of rules for team selection:

Up to three teams from each school can participate in the on-site contest, depending on how many following conditions the school in question meets:

  1. A team from this school has solved at least M problems in the preliminary contest;
  2. Some of the teams from this school ranked top 20 in previous World Finals;
  3. This school has hosted a provincial contest this year.

Your task is to write a program to help the contest holders to calculate how many teams are allowed to participate in the on-site final contest.

输入:

There are multiple test cases in the input file. Each test case starts with three integers S, T and M (1 ≤ S ≤ 100, 1 ≤ T ≤ 2000, 0 ≤ M ≤ 10), representing the number of schools, the number of teams participating in the preliminary contest, and the minimum number of problems which is required to be solved in order to enter the on-site competition, respectively.

Each of the following S lines consists of three integers Id, P and Q, (1 ≤ IdS, 0 ≤ P, Q ≤ 1), representing the Id of the school, whether this school satisfies condition b, and whether this school satisfies condition c.

The last part of each test case consists of T lines. There are two integers on each of the T lines, Sid and Tot (1 ≤ SidS, 0 ≤ Tot ≤ 10), meaning that a team from school Sid had solved Tot problems in the preliminary contest.

Two consecutive test cases are separated by a blank line. S = 0, T = 0, M = 0 indicates the end of input and should not be processed by your program.

输出:

For each test case, print the total number of teams which are allowed to participate in the on-site competition on a separate line in the format as indicated in the sample output.

样例输入:

5 8 6
5 0 1
4 0 0
1 0 0
3 1 1
2 1 1
2 6
3 3
2 9
5 7
4 8
3 6
2 8
1 6
5 8 6
3 0 1
5 1 1
2 0 1
1 1 1
4 1 0
5 7
2 5
4 5
5 5
3 3
5 6
2 0
4 7
0 0 0

样例输出:

Case 1: 10
Case 2: 9

解题代码:

//* @author: 
import java.util.Scanner;
import java.util.Arrays;
public class Main{
  public static void main(String args[]){
    Scanner sc=new Scanner(System.in);
  
   int p[]=new int[101];
    int i,j,n,s,t,m,id,t1,t2,sum,sid,tot,cas=0;;
    while (true) {
       s=sc.nextInt();t=sc.nextInt();m=sc.nextInt();
        if (s==0&&t==0&&m==0) break;
        for (i=1;i<=100;i++) p[i]=0;sum=0;cas++;
        for (i=1;i<=s;i++) {
          id=sc.nextInt();
          t1=sc.nextInt();
          t2=sc.nextInt();
          if (p[id]==0) { sum+=t1+t2;p[id]=1;}
         }
        for (i=1;i<=100;i++) p[i]=0;
        for (i=1;i<=t;i++) {
         sid=sc.nextInt();
         tot=sc.nextInt();
         if (p[sid]==0&&tot>=m) { sum++;p[sid]=1;}
        }        
        System.out.printf("Case %d: %d\n",cas,sum);
    }
  }
}

  1. 题本身没错,但是HDOJ放题目的时候,前面有个题目解释了什么是XXX定律。
    这里直接放了这个题目,肯定没几个人明白是干啥