ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1299. Псилонцы

Why WA1?
Послано Ignat Zakrevsky 12 янв 2012 14:14
I always have WA1?
Give me some tests

My code is here:
======================================

#include <iostream>
#include <math.h>
using namespace std;

void Attack(int &, int &, int &, int &);
void Guard(int &, int &);
void Defense(int &);
void Patrol(int &, int &);

void OffensiveStrike(int &, int &);
void RetreatStrike(int &, int &);

void LEFT(int &);
void RIGHT(int &);
void FRONT(int &);
void BACKWARD(int &);
void FIRE(int &);
void STOP();

int X,P;
int M,MP,MA;

int main()
{
    cin >> X >> P;

    char model;
    cin >> model;

    cin >> M >> MP >> MA;

    if ('A'==model)
    {
        int N,NP;
        cin >> N >> NP;
        Attack(N,NP,M,MP);
    } else
    if ('G'==model)
    Guard(M,MA);
      else
    if ('D'==model)
    Defense(M);
      else
    if ('P'==model)
    {
        int A;
        cin >> A;
        Patrol(M,A);
    }

}

void Attack(int &N, int &NP, int &M, int &MP)
{
    if (N*NP>M*MP*3) OffensiveStrike(M,MA);
        else RetreatStrike(M,MA);
}

void Guard(int &M, int &MA)
{
    if (0==M) STOP;
    else
        if (MA>=5) LEFT(X);
        else if (MA<=-5) RIGHT(P);
            else FIRE(P);
}

void Defense(int &M)
{
    if (M*20>=P) RetreatStrike(M,MA);
        else Guard(M,MA);
}

void Patrol(int &M, int &A)
{
    if (M>0) Defense(M);
    else if (abs(A)<=20 || 180-abs(A)<=20)
        {
            if (abs(A)<=20) FRONT(X);
            else BACKWARD(X);
        } else
            if ((A>=90 && A<160) || (A>=-90 && A<-20)) RIGHT(X);
            else LEFT(X);

}


void OffensiveStrike(int &M, int &MA)
{
    if (abs(MA)>=10 || 0==M) FRONT(X);
            else FIRE(P);
}

void RetreatStrike(int &M, int &MA)
{
    if (abs(MA)>=5 || 0==M) BACKWARD(X);
               else FIRE(P);
}

void LEFT(int &X)
{
    if (X>100) cout << "LEFT 100";
    else   cout << "LEFT " << X;
}

void RIGHT(int &X)
{
    if (X>100) cout << "RIGHT 100";
    else   cout << "RIGHT " << X;
}

void FRONT(int &X)
{
    if (X>100) cout << "FRONT 100";
    else   cout << "FRONT " << X;
}

void BACKWARD(int &X)
{
    if (X>100) cout << "BACKWARD 100";
    else   cout << "BACKWARD " << X;
}

void FIRE(int &P)
{
    if (P>20) cout << "FIRE 20";
    else  cout << "FIRE " << P;
}

void STOP()
{
    cout << "STOP";
}