Задания
Версия для печати и копирования в MS Word
Тип Д27 C4 № 10401
i

На плос­ко­сти за­да­но мно­же­ство точек с це­ло­чис­лен­ны­ми ко­ор­ди­на­та­ми. Не­об­хо­ди­мо найти ко­ли­че­ство от­рез­ков, об­ла­да­ю­щих сле­ду­ю­щи­ми свой­ства­ми:

1)  оба конца от­рез­ка при­над­ле­жат за­дан­но­му мно­же­ству;

2)  ни один конец от­рез­ка не лежит на осях ко­ор­ди­нат;

3)  от­ре­зок пе­ре­се­ка­ет­ся ровно с одной осью ко­ор­ди­нат.

На­пи­ши­те эф­фек­тив­ную по вре­ме­ни и по ис­поль­зу­е­мой па­мя­ти про­грам­му для ре­ше­ния этой за­да­чи. Про­грам­ма счи­та­ет­ся эф­фек­тив­ной по вре­ме­ни, если при уве­ли­че­нии ко­ли­че­ства точек в k раз время ра­бо­ты воз­рас­та­ет не более чем в k раз. Про­грам­ма счи­та­ет­ся эф­фек­тив­ной по па­мя­ти, если раз­мер па­мя­ти для хра­не­ния всех не­об­хо­ди­мых дан­ных не за­ви­сит от ко­ли­че­ства точек и не пре­вы­ша­ет 1 ки­ло­бай­та. Перед тек­стом про­грам­мы крат­ко опи­ши­те ал­го­ритм ре­ше­ния и ука­жи­те язык про­грам­ми­ро­ва­ния и его вер­сию.

Вход­ные дан­ные

В пер­вой стро­ке задаётся N  — ко­ли­че­ство точек в за­дан­ном мно­же­стве.

Каж­дая из сле­ду­ю­щих строк со­дер­жит два целых числа x и y  — ко­ор­ди­на­ты оче­ред­ной точки. Га­ран­ти­ру­ет­ся, что 1 ≤ N ≤ 10 000; –1000 ≤ x, y ≤ 1000.

При­мер вход­ных дан­ных:

4

6 6

-8 8

-9 -9

7 -5

Вы­ход­ные дан­ные

Не­об­хо­ди­мо вы­ве­сти един­ствен­ное число: ко­ли­че­ство удо­вле­тво­ря­ю­щих тре­бо­ва­ни­ям от­рез­ков.

При­мер вы­ход­ных дан­ных для при­ведённого выше при­ме­ра вход­ных дан­ных: 4.

Спрятать решение

Ре­ше­ние.

От­ре­зок, концы ко­то­ро­го не лежат на осях ко­ор­ди­нат, пе­ре­се­ка­ет­ся ровно с одной осью в том и толь­ко в том слу­чае, если его концы лежат в со­сед­них чет­вер­тях. Если из­вест­ны ве­ли­чи­ны n1, n2, n3, n4, по­ка­зы­ва­ю­щие ко­ли­че­ство точек в каж­дой чет­вер­ти, то ко­ли­че­ство от­рез­ков равно n1n2 + n2n3 + n3n4 + n4n1.

Упро­стив это вы­ра­же­ние, по­лу­чим (n1 + n3)(n2 + n4).

Это вы­ра­же­ние можно по­лу­чить и не­по­сред­ствен­но из усло­вий за­да­чи, если об­ра­тить вни­ма­ние на то, что у каж­до­го под­хо­дя­ще­го от­рез­ка один конец лежит в нечётной чет­вер­ти, а дру­гой  — в чётной и для опре­де­ле­ния ко­ли­че­ства от­рез­ков можно счи­тать точки не в каж­дой чет­вер­ти от­дель­но, а их общее ко­ли­че­ство в чётных и нечётных чет­вер­тях.

Оба под­хо­да (подсчёт по каж­дой чет­вер­ти от­дель­но и по двум груп­пам) поз­во­ля­ют по­лу­чить эф­фек­тив­ные про­грам­мы. Ниже при­во­дят­ся про­грам­мы на язы­ках Пас­каль и Java для обоих спо­со­бов.

 

При­мер пра­виль­ной про­грам­мы на Пас­ка­ле

 

program P27;

  var

    N: integer; {ко­ли­че­ство точек}

    x,y: integer; {ко­ор­ди­на­ты оче­ред­ной точки}

    n1, n2: integer; {ко­ли­че­ство точек

      по чётным и нечётным чет­вер­тям}

    s: integer; {ко­ли­че­ство от­рез­ков}

    i: integer;

begin

  readln(N);

  n1:=0; n2:=0;

  for i:=1 to N do begin

    readln(x,y);

    if x*y > 0 then n1:=n1+1;

    if x*y < 0 then n2:=n2+1;

      {нель­зя ста­вить else – воз­мож­ны нули}

  end;

  s := n1*n2;

  writeln(s)

end.

 

При­мер пра­виль­ной и эф­фек­тив­ной про­грам­мы на языке Java (подсчёт по каж­дой чет­вер­ти от­дель­но)

 

import java.util.Scanner;

public class P27A2 {

  public static void main(String args[]) {

    Scanner in = new Scanner(System.in);

    int N = in.nextInt();

    int n1 = 0, n2 = 0, n3 = 0, n4 = 0;

    for (int i=0; i < N; ++i) {

      int x = in.nextInt();

      int y = in.nextInt();

      if (x > 0 && y > 0) { n1++ ; }

      if (x < 0 && y > 0) { n2++ ; }

      if (x < 0 && y < 0) { n3++ ; }

      if (x > 0 && y < 0) { n4++ ; }

    }

    int s = n1*n2 + n2*n3 + n3*n4 + n4*n1;

    System.out.println(s);

  }

}

Спрятать критерии
Критерии проверки:

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Про­грам­ма пра­виль­но ра­бо­та­ет для любых вход­ных дан­ных про­из­воль­но­го раз­ме­ра и на­хо­дит ответ, не со­хра­няя вход­ные дан­ные в мас­си­ве. Про­грам­ма удо­вле­тво­ря­ет тре­бо­ва­ни­ям эф­фек­тив­но­сти, ука­зан­ным в усло­вии за­да­чи.

До­пус­ка­ет­ся на­ли­чие в тек­сте про­грам­мы одной син­так­си­че­ской ошиб­ки: про­пу­щен или не­вер­но ука­зан знак пунк­ту­а­ции, не­вер­но на­пи­са­но или про­пу­ще­но за­ре­зер­ви­ро­ван­ное слово языка про­грам­ми­ро­ва­ния, не опи­са­на или не­вер­но опи­са­на пе­ре­мен­ная, при­ме­ня­ет­ся опе­ра­ция, не­до­пу­сти­мая для со­от­вет­ству­ю­ще­го типа дан­ных (если одна и та же ошиб­ка встре­ча­ет­ся не­сколь­ко раз, то это счи­та­ет­ся за одну ошиб­ку).

4
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 4 балла, при этом про­грам­ма ра­бо­та­ет верно, время ра­бо­ты ли­ней­но за­ви­сит от N, но раз­мер ис­поль­зу­е­мой па­мя­ти за­ви­сит от ко­ли­че­ства точек.

На­при­мер, вход­ные дан­ные за­по­ми­на­ют­ся в мас­си­ве или дру­гой струк­ту­ре дан­ных, раз­мер ко­то­рой со­от­вет­ству­ет числу N.

До­пус­ка­ет­ся одна из сле­ду­ю­щих оши­бок.

1. Про­пу­щен­ная или не­вер­ная ини­ци­а­ли­за­ция мак­си­му­мов.

2. В не­ко­то­рых язы­ках и си­сте­мах про­грам­ми­ро­ва­ния (на­при­мер, в Бей­си­ке) все пе­ре­мен­ные после со­зда­ния имеют зна­че­ние 0. В этом слу­чае от­сут­ствие ини­ци­а­ли­за­ции нель­зя счи­тать ошиб­кой.

3. Вме­сто аб­со­лют­ных зна­че­ний (мо­ду­лей) ис­поль­зу­ют­ся не­по­сред­ствен­ные зна­че­ния ко­ор­ди­нат.

4. Ошиб­ка в срав­не­нии, в ре­зуль­та­те ко­то­рой в одном или не­сколь­ких ме­стах на­хо­дит­ся ми­ни­маль­ное зна­че­ние вме­сто мак­си­маль­но­го.

5. Ис­поль­зо­ва­ние ве­ще­ствен­ных вы­чис­ле­ний и опе­ра­ции из­вле­че­ния корня для на­хож­де­ния пло­ща­ди.

6. Не­вер­ная об­ра­бот­ка слу­чая от­сут­ствия тре­бу­е­мо­го тре­уголь­ни­ка. До­пус­ка­ет­ся на­ли­чие от одной до трёх син­так­си­че­ских оши­бок, опи­сан­ных в кри­те­ри­ях на 4 балла.

3
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 3 или 4 балла, при

этом про­грам­ма ра­бо­та­ет верно, эф­фек­тив­но или нет. В част­но­сти, в 2 балла оце­ни­ва­ют­ся пе­ре­бор­ные ре­ше­ния, в ко­то­рых все ис­ход­ные дан­ные со­хра­ня­ют­ся в мас­си­ве, рас­смат­ри­ва­ют­ся все воз­мож­ные тре­уголь­ни­ки, из ко­то­рых вы­би­ра­ют­ся под­хо­дя­щие.

До­пус­ка­ет­ся на­ли­чие не­сколь­ких со­дер­жа­тель­ных оши­бок, опи­сан­ных в кри­те­ри­ях на 3 балла, и до пяти син­так­си­че­ских оши­бок, опи­сан­ных в кри­те­ри­ях на 4 балла.

2
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 2, 3 или 4 балла, но про­грам­ма ра­бо­та­ет в от­дель­ных част­ных слу­ча­ях. 1 балл также ста­вит­ся, если про­грам­ма не­ра­бо­то­спо­соб­на или не на­пи­са­на, но из по­яс­не­ний видно, что эк­за­ме­ну­е­мый в целом верно пред­став­ля­ет путь ре­ше­ния.1
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 1, 2, 3 или 4 балла.0
Мак­си­маль­ный балл4

Аналоги к заданию № 10428: 10401 Все