Submission details
Task:Forest
Sender:Anonyymit Algoritmistit
Submission time:2015-09-16 18:59:11 +0300
Language:Java
Status:READY
Result:
Test results
testverdicttime
#10.19 sdetails
#2ACCEPTED0.18 sdetails
#30.18 sdetails
#40.18 sdetails
#50.18 sdetails
#60.20 sdetails
#70.17 sdetails
#80.18 sdetails
#90.18 sdetails
#100.18 sdetails
#110.25 sdetails
#120.25 sdetails
#130.27 sdetails
#140.26 sdetails
#150.28 sdetails
#160.29 sdetails
#170.29 sdetails
#180.27 sdetails
#190.29 sdetails
#200.29 sdetails

Code

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
//package kilo.v2.t2;

import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author asjuvone
 */
public class KILOV2T2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        IO io = new IO();

        int n = io.nextInt();

        int uloeviX = io.nextInt();
        int uloeviY = io.nextInt();

        Pari uolevi = new Pari(uloeviX, uloeviY);

        int nakee = n;
        ArrayList<Pari> parit = new ArrayList();

        for (int i = 0; i < n; i++) {
            int x = io.nextInt();
            int y = io.nextInt();
            Pari uus = new Pari(x, y);
            parit.add(uus);
        }

        for (Iterator<Pari> it = parit.iterator(); it.hasNext();) {
            Pari pari = it.next();
            for (Pari piste : parit) {
                if (piste.equals(pari)) continue;
                if (onksPisteSuoral(piste, pari, uolevi)) {
                    nakee--;
                    it.remove();
                    break;
                }
            }
        }

        System.out.println(parit.size());

    }

    static boolean onksPisteSuoral(Pari piste, Pari suora1, Pari suora2) {
        
        if (piste.y < Math.max(suora1.y, suora2.y) 
                && piste.x > Math.min(suora1.x, suora2.x)
                && piste.y > Math.min(suora1.y, suora2.y)
                && piste.x < Math.max(suora1.x, suora2.x)) {
            if (piste.y == (suora1.x * suora2.y) / suora2.x ) {
                return true;
            }
        }
        return false;
        
        
        
    }
    
    
//    static boolean onkoPisteSuoralla(Pari piste, Pari suora1, Pari suora2) {
//        //Lasketaan pisteen etäisyys suorasta ja jos se on 0 niin true, muuten false;
//        int x1 = suora1.x;
//        int x2 = suora2.x;
//        int y1 = suora1.y;
//        int y2 = suora2.y;
//        int x3 = piste.x;
//        int y3 = piste.y;
//
//        double ylaosa = Math.abs((x1 * y2) - (x2 * y1) + (x2 * y3) - (x3 - y2) + (x3 * y1) - (x1 * y3));
//
//        double alaosa = (Math.pow(suora1.x - suora2.x, 2) + Math.pow(suora1.y - suora2.y, 2));
//        System.out.println(ylaosa / alaosa);
//        return (ylaosa / alaosa) < 0.05;
//    }

}

class Pari {

    long x;
    long y;

    public Pari(long x, long y) {
        this.x = x;
        this.y = y;
    }

}

Test details

Test 1

Verdict:

input
152
391446 44026
391450 44026
391448 44028
391450 44028
...

correct output
117

user output
112

Test 2

Verdict: ACCEPTED

input
167
-395738 -130738
-395745 -130742
-395739 -130735
-395746 -130731
...

correct output
124

user output
124

Test 3

Verdict:

input
183
200778 460834
200784 460841
200769 460836
200773 460830
...

correct output
132

user output
181

Test 4

Verdict:

input
130
223758 419977
223753 419974
223762 419974
223759 419983
...

correct output
97

user output
127

Test 5

Verdict:

input
168
375864 397759
375855 397764
375855 397757
375866 397758
...

correct output
124

user output
149

Test 6

Verdict:

input
187
-23941 284266
-113941 -30734
-113941 689266
-203941 329266
...

correct output
134

user output
187

Test 7

Verdict:

input
127
260079 -413943
440079 -53943
575079 36057
530079 -773943
...

correct output
98

user output
127

Test 8

Verdict:

input
144
411083 460318
366083 145318
771083 865318
411083 685318
...

correct output
109

user output
144

Test 9

Verdict:

input
135
-460235 328576
-145235 553576
-910235 688576
-280235 58576
...

correct output
98

user output
135

Test 10

Verdict:

input
113
390086 -474936
-59914 -609936
480086 -879936
345086 -204936
...

correct output
86

user output
113

Test 11

Verdict:

input
1921
221773 -175524
-75227 -72024
-75227 -72023
527773 -22524
...

correct output
1866

user output
1921

Test 12

Verdict:

input
1960
-166870 -301876
4130 -45376
4129 -45376
4130 -45377
...

correct output
1891

user output
1960

Test 13

Verdict:

input
1983
490468 217759
85468 357259
791968 631759
76468 150259
...

correct output
1917

user output
1983

Test 14

Verdict:

input
1910
75208 56523
340708 452523
340708 452522
-356792 430023
...

correct output
1863

user output
1910

Test 15

Verdict:

input
1984
-178901 -113059
-381401 12941
-381400 12941
-381401 12940
...

correct output
1932

user output
1984

Test 16

Verdict:

input
2000
-318296 48998
-322618 47556
-335584 43230
-300516 32354
...

correct output
1794

user output
1988

Test 17

Verdict:

input
2000
-376251 158360
-373641 158980
-386177 169482
-387909 155698
...

correct output
1796

user output
1993

Test 18

Verdict:

input
2000
4141 -447930
22987 -450556
22988 -450556
8931 -452688
...

correct output
1797

user output
2000

Test 19

Verdict:

input
2000
-83018 -8575
-84778 -5615
-84778 -5616
-84778 -5614
...

correct output
1819

user output
1999

Test 20

Verdict:

input
2000
-199417 -261684
-204449 -244760
-219545 -193988
-183653 -255010
...

correct output
1803

user output
1999