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

Обсуждение задачи 2023. Дональд-почтальон

WA #5
Послано mikhsatyshev 11 окт 2014 14:13
What's wrong? Here is my code:

var a,b,c:array [1..3,1..3] of string; d,s,i,j,j1,n,p:longint; x:string;
begin
a[1,1]:='Alice';
a[1,2]:='Ariel';
a[1,3]:='Aurora';
a[2,1]:='Phil';
a[2,2]:='Peter';
a[2,3]:='Olaf';
a[3,1]:='Phoebus';
a[3,2]:='Ralph';
a[3,3]:='Robin';
b[1,1]:='Bambi';
b[1,2]:='Belle';
b[1,3]:='Bolt';
b[2,1]:='Mulan';
b[2,2]:='Mowgli';
b[2,3]:='Mickey';
b[3,1]:='Silver';
b[3,2]:='Simba';
b[3,3]:='Stitch';
c[1,1]:='Dumbo';
c[1,2]:='Genie';
c[1,3]:='Jiminy';
c[2,1]:='Kuzko';
c[2,2]:='Kida';
c[2,3]:='Kenai';
c[3,1]:='Tarzan';
c[3,2]:='Tiana';
c[3,3]:='Winnic';
readln (n);
s:=0;
p:=1;
for i:=1 to n do begin
readln (x);
for j:=1 to 3 do
for j1:=1 to 3 do begin
If x=a[j,j1] then d:=1;
If x=b[j,j1] then d:=2;
If x=c[j,j1] then d:=3;
end;
s:=s+abs (p-d);
p:=d;
end;
writeln (s);
end.
Re: WA #5
Послано olpetOdessaONU [1 2/3] 11 окт 2014 17:58
Winnie, not Winnic

Edited by author 11.10.2014 17:58

Edited by author 11.10.2014 17:58
Re: WA #5
Послано Wasdek (USU) 11 окт 2014 18:09
Why so dufficult solution? You could use switch/case for only first letters!
Re: WA #5
Послано humanoid 19 мар 2015 06:42
Switch? Ha! How about sets?
Re: WA #5
Послано Egor 15 сен 2015 02:20
No need for sets:

First, initialize positions of the names:
int m[256];
m['A'] = m['P'] = m['O'] = m['R'] = 1;
m['B'] = m['M'] = m['S'] = 2;
m['D'] = m['G'] = m['J'] = m['K'] = m['T'] = m['W'] = 3;

Then check where we are:
...
string s;
cin >> s;

char c = s[0];
if (m[c] != current_position)
...

Edited by author 15.09.2015 02:21

Edited by author 15.09.2015 02:21

Edited by author 15.09.2015 02:22

Edited by author 15.09.2015 02:22
Re: WA #5
Послано ELDVN 1 ноя 2015 13:09
My solution:
#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <algorithm>
#include <bitset>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <iomanip>

#define F first
#define S second
#define ll long long
#define len length()
#define sqr(x) x*x
#define pb push_back
#define mp make_pair
#define sz(x) ((int) (x).size())
#define all(x) x.begin(), x.end()
#define allr(x) x.rbegin(), x.rend()
#define bp(x) __builtin_popcount(x)
#define INF numeric_limits<long long int>::max()
#define frp freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
#define forit(it, s) for(__typeof(s.begin()) it = s.begin(); it != s.end(); it++)

const int maxn = (int)1e6;
const int mod = (int)1e9 + 7;

using namespace std;

int n;
string s;
int step,cnt=1;
int ans;

main(){
    scanf("%d",&n);
    for(int i=0; i < n; i++){
        cin>>s;
        for(int j=0; j <s.len; j++){
            switch(s[j]){
                case 'A':case 'P':case 'O':case 'R':ans=1;break;
                case 'B':case 'M':case 'S':ans=2;break;
                case 'D':case 'G':case 'J':case 'K':case 'T':case 'W': ans=3;break;
            }
        }
        step+=abs(cnt-ans);
        cnt=ans;
    }
    printf("%d",step);






    return 0;
}