Форум программистов, компьютерный форум CyberForum.ru

Посчитать количество пустых клеток шахматной доски, которые не бьются ни одним ферзем - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти количество повторяющихся в массиве цифр http://www.cyberforum.ru/cpp-beginners/thread177084.html
Помогите у меня задача:"Мади подарили новый блокнот. Ему очень понравился подарок, но единственное, что его смутило, это то, что страницы блокнота не пронумированны. Мади решил пронумеровать страницы своего блокнота от 1 до N. Так как Мади отличный программист, он заранее посчитал сколько раз ему придется написать каждую цифру. А вам слабо? Формат входных данных Число N (1<=N<1000000000)...
C++ Теория массового обслуживания задание: Пусть имеется обслуживающая система из n обслуживающих аппара-тов. Работа этой системы разбита на такты. В течение одного такта может одна заявка стать в очередь и одна заявка приступить к обслуживанию, (разумеется, если аппарат свободен). Вероятность заявки поступить на обслуживание Р(A), вероятность обслужить заявку P(B), вероятность заявки покинуть очередь после Т... http://www.cyberforum.ru/cpp-beginners/thread177073.html
C++ подделать программку
ребят помогите,есть программа написанная,ее нужно немного изменить на мой вариант вот есть рабочая 6-го варианта,нужно подправить ее по 3-ий вариант, заранее благодарен #include <iostream.h> #include <conio.h> #include <graphics.h> #include <math.h> #define PATHDRIVER "C:\\temp\\lng\\bc\\bgi\\"
C++ Найти количество столбцов матрицы, которые не имеют ни одного нулевого элемента
дано целочисельную прямокутную матрицу.Найти: 1)Количество столбцов которые неимеют ниодново нульового елемента. 2)номер рядка в котором находитса найдолшая последовательность одинакових елементов.
C++ Найти количество элементов, расположенных после последнего максимального элемента http://www.cyberforum.ru/cpp-beginners/thread177011.html
Minmax17. Дано целое число N и набор из N целых чисел. Найти количество элементов, расположенных после последнего максимального элемента.
C++ Разделить число на составляющие и найти искомую цифру Программа, которая разделяет число на состовляющие и находит искомую цифру, вот, то, что получилось: # include <stdio.h> void main() { int c,p,o,z=0; printf("cifra="); подробнее

Показать сообщение отдельно
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
16.10.2010, 23:30     Посчитать количество пустых клеток шахматной доски, которые не бьются ни одним ферзем
Если аккуратно закодить, считает за 12 секунд на моём компе (при максимальных n и k) и потребляет 12 МБ памяти (1 бит на клетку).
sync_with_stdio(false) - это на всякий случай, с вводом вроде проблем никогда не было, а вот с таким, что при редиректе вывода в файл скомпилированое Borland'ом тормозит, встречался.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <algorithm>
 
using namespace std;
 
const int maxN = 10000;
char a[maxN][(maxN + 7) / 8];
 
int main()
{
    int n, k;
    cin.sync_with_stdio(false);
    cin >> n >> k;
    int nb = n >> 3;
    for (int i = 0; i < k; i++)
    {
        int x, y;
        cin >> x >> y;
        x--, y--;
        int xb = x >> 3;
        char xm = 1 << (x & 7);
        for (int cxb = 0; cxb < nb; cxb++)
            a[y][cxb] = -1;
        for (int cy = 0; cy < n; cy++)
            a[cy][xb] |= xm;
        for (int i = -min(x, y), e = n - max(x, y); i < e; i++)
            a[y + i][(x + i) >> 3] |= 1 << ((x + i) & 7);
        for (int i = -min(x, n - 1 - y), e = n - max(x, n - 1 - y); i < e; i++)
            a[y - i][(x + i) >> 3] |= 1 << ((x + i) & 7);
    }
    char m = ~(-1 << (n & 7));
    for (int y = 0; y < n; y++)
        a[y][n >> 3] &= m;
    int s = 0;
    for (int y = 0; y < n; y++)
        for (int xb = 0; xb < nb; xb++)
        {
            int t = a[y][xb];
            s += (t >> 0 & 1) + (t >> 1 & 1) + (t >> 2 & 1) + (t >> 3 & 1) +
                (t >> 4 & 1) + (t >> 5 & 1) + (t >> 6 & 1) + (t >> 7 & 1);
        }
    cout << n * n - s;
}
 
Текущее время: 23:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru