Untitled
fttk
plain_text
2 years ago
3.0 kB
9
Indexable
//rank
import java.util.ArrayList;
import java.util.HashMap;
class UserSolution {
HashMap<String, Player> players;
HashMap<String, Problem> problems;
int totalScore, numPlayer;
int[] scores;
int[] failscores;
void init () {
players = new HashMap<>();
problems = new HashMap<>();
totalScore = numPlayer = 0;
scores = new int[6005];
failscores = new int[6005];
}
void destroy () {
}
void newPlayer(char name[]) {
numPlayer++;
String mName=arr2string(name);
Player player = new Player(mName,numPlayer);
players.put(mName, player);
}
void newProblem(char name[], int score) {
String mName = arr2string(name);
Problem problem = new Problem(mName,score);
problems.put(mName, problem);
totalScore +=score;
}
void changeProblemScore(char name[], int new_score) {
String mName=arr2string(name);
Problem problem=problems.get(mName);
int diff=new_score - problem.score;
problem.score = new_score;
totalScore +=diff;
for(Player p:problem.success) {
p.score +=diff;
scores[p.id]=p.score;
}
for(Player p:problem.fail) {
p.fail +=diff;
failscores[p.id]=p.fail;
}
}
void attemptProblem(char player_name[], char problem_name[], int attempt_result) {
String playerName=arr2string(player_name);
String problemName=arr2string(problem_name);
Problem problem=problems.get(problemName);
Player player = players.get(playerName);
if(attempt_result==1) {
player.score +=problem.score;
problem.success.add(player);
scores[player.id]=player.score;
}
else {
player.fail +=problem.score;
problem.fail.add(player);
failscores[player.id] = player.fail;
}
}
Result getRank(char player_name[]) {
Result res = new Result(-1, -1, -1);
int c=1, b=1, w=numPlayer;
String name=arr2string(player_name);
Player player=players.get(name);
int best=totalScore - player.fail;
for(int i=0; i<=numPlayer; i++) {
if(player.score < scores[i]) c++;
if(best < scores[i]) b++;
if(scores[player.id] > totalScore - failscores[i]) {
w--;
}
}
res = new Result(c,b,w);
return res;
}
String arr2string(char name[]) {
StringBuilder s=new StringBuilder();
for(int i=0; name[i]!='\0'; i++) {
s.append(name[i]);
}
return s.toString();
}
}
class Player {
String name;
int score, fail, id;
public Player(String name, int id) {
this.name=name;
this.id=id;
this.score=this.fail=0;
}
}
class Problem {
String name;
int score;
ArrayList<Player> success, fail;
public Problem(String name, int score) {
this.name=name;
this.score=score;
this.success=new ArrayList<>();
this.fail = new ArrayList<>();
}
}Editor is loading...