Skip to content

Instantly share code, notes, and snippets.

@PreSoichiSumi
Created April 26, 2016 08:11
Show Gist options
  • Save PreSoichiSumi/0beca4553644194a709826b80256bd07 to your computer and use it in GitHub Desktop.
Save PreSoichiSumi/0beca4553644194a709826b80256bd07 to your computer and use it in GitHub Desktop.
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.NoSuchElementException;
public class Main {
private static long n,m;
private static int pa,tyo,gu;
public static void main(String[] args)throws Exception {
FastScanner sc=new FastScanner();
int n=sc.nextInt();
List<Data> list=new ArrayList<Data>();
for(int i=0;i<n;i++){
list.add(new Data(i,sc.nextInt(), sc.nextInt()));
}
Collections.sort(list);
int win[]=new int[n];
int lose[]=new int[n];
//int eq[]=new int[n];
Arrays.fill(win, 0);
Arrays.fill(lose, 0);
//Arrays.fill(eq, 0);
int itS=0;
int itE=1;
if(n==1){
System.out.println(0+" "+0+" "+0);
return;
}
while(itS!=n){
if(itE==n || list.get(itS).r!=list.get(itE).r){//被ってない ok
win[list.get(itS).index]=n-itS-1;
lose[list.get(itS).index]=itS;
itS++;
itE++;
}else{//被ってるので普通にじゃんけん
pa=0;
tyo=0;
gu=0;
counter(list.get(itS).h);
while(list.get(itS).r==list.get(itE).r){
counter(list.get(itE).h);
itE++;
if(itE==n)break;
}
for(int i=itS;i<itE;i++){
if(list.get(i).h==1){
win[list.get(i).index]=tyo+(n-itE);
lose[list.get(i).index]=pa+itS;
// eq[list.get(i).index]=gu-1;
}else if(list.get(i).h==2){
win[list.get(i).index]=pa+(n-itE);
lose[list.get(i).index]=gu+itS;
// eq[list.get(i).index]=tyo-1;
}else{
win[list.get(i).index]=gu+(n-itE);
lose[list.get(i).index]=tyo+itS;
// eq[list.get(i).index]=pa-1;
}
}
itS=itE;
itE++;
}
}
for(int i=0;i<n;i++){
System.out.println(win[i]+" "+lose[i]+" "+(n-win[i]-lose[i]-1));
}
}
public static void counter(int a){
if(a==1)gu++;
if(a==2)tyo++;
if(a==3)pa++;
}
}
class Data implements Comparable<Data>{
public int index,r,h;
public Data(int index,int one,int two) {
super();
this.index=index;
this.r=one;
this.h=two;
}
@Override
public int compareTo(Data o){
if(this.r!=o.r){
return o.r-this.r;
}else{
return this.h-o.h;
}
}
}
class FastScanner {
private final InputStream in = System.in;
private final byte[] buffer = new byte[1024];
private int ptr = 0;
private int buflen = 0;
private boolean hasNextByte() {
if (ptr < buflen) {
return true;
}else{
ptr = 0;
try {
buflen = in.read(buffer);
} catch (IOException e) {
e.printStackTrace();
}
if (buflen <= 0) {
return false;
}
}
return true;
}
private int readByte() { if (hasNextByte()) return buffer[ptr++]; else return -1;}
private boolean isPrintableChar(int c) { return 33 <= c && c <= 126;}
private void skipUnprintable() { while(hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;}
public boolean hasNext() { skipUnprintable(); return hasNextByte();}
public String next() {
if (!hasNext()) throw new NoSuchElementException();
StringBuilder sb = new StringBuilder();
int b = readByte();
while(isPrintableChar(b)) {
sb.appendCodePoint(b);
b = readByte();
}
return sb.toString();
}
public long nextLong() {
if (!hasNext()) throw new NoSuchElementException();
long n = 0;
boolean minus = false;
int b = readByte();
if (b == '-') {
minus = true;
b = readByte();
}
if (b < '0' || '9' < b) {
throw new NumberFormatException();
}
while(true){
if ('0' <= b && b <= '9') {
n *= 10;
n += b - '0';
}else if(b == -1 || !isPrintableChar(b)){
return minus ? -n : n;
}else{
throw new NumberFormatException();
}
b = readByte();
}
}
public int nextInt() {
if (!hasNext()) throw new NoSuchElementException();
int n = 0;
boolean minus = false;
int b = readByte();
if (b == '-') {
minus = true;
b = readByte();
}
if (b < '0' || '9' < b) {
throw new NumberFormatException();
}
while(true){
if ('0' <= b && b <= '9') {
n *= 10;
n += b - '0';
}else if(b == -1 || !isPrintableChar(b)){
return minus ? -n : n;
}else{
throw new NumberFormatException();
}
b = readByte();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment