Pagini recente » Cod sursa (job #2083232) | Cod sursa (job #598439) | Cod sursa (job #1108968) | Cod sursa (job #2563989) | Cod sursa (job #1731057)
#include <iostream>
#include<vector>
#include<cstdio>
#include<map>
using namespace std;
map< int, pair< int, int> > phone;
vector< pair <int, int> > moves;
pair< int, int> firstP;
int a[6][5];
int same(int i,int j)
{
int i2 = i;
int j2 = j;
for(int k=0;k<moves.size();k++)
{
int ii = moves[k].first;
int jj = moves[k].second;
i = i + ii;
j = j + jj;
if(i<0 || i>5 || j<0 || j>4 || a[i][j] != 0)
{
return 0;
}
}
return 1;
}
int sol()
{
for(int i=0;i<6;i++)
{
a[i][0] = -1;
a[i][4] = -1;
}
for(int j=0;j<5;j++)
{
a[0][j] = -1;
a[5][j] = -1;
}
a[4][1] = -1;
a[4][3] = -1;
for(int i=1;i<=4;i++)
{
for(int j=1;j<=3;j++)
{
if(a[i][j] == 0 && (i!=firstP.first || j!=firstP.second))
{
if(same(i,j))
{
return 1;
}
}
}
}
return 0;
}
int main()
{
//freopen("a.in","r",stdin);
phone.insert(make_pair(1,make_pair(0,0)));
phone.insert(make_pair(2,make_pair(0,1)));
phone.insert(make_pair(3,make_pair(0,2)));
phone.insert(make_pair(4,make_pair(1,0)));
phone.insert(make_pair(5,make_pair(1,1)));
phone.insert(make_pair(6,make_pair(1,2)));
phone.insert(make_pair(7,make_pair(2,0)));
phone.insert(make_pair(8,make_pair(2,1)));
phone.insert(make_pair(9,make_pair(2,2)));
phone.insert(make_pair(0,make_pair(3,1)));
int n;
cin>>n;
char c;
cin>>c;
int last = c-'0';
firstP = phone[last];
firstP.first++;
firstP.second++;
n--;
while(n>0)
{
n--;
cin>>c;
int current = c - '0';
pair< int , int> lastPoz = phone[last];
pair< int, int> currPoz = phone[current];
int i = currPoz.first - lastPoz.first;
int j = currPoz.second - lastPoz.second;
moves.push_back(make_pair(i,j));
last = current;
}
if(sol())
{
cout<<"NO\n";
}
else
{
cout<<"YES\n";
}
return 0;
}