12573 | 2024-12-23 14:45:36 | 4rt3xp0 | 2016. április | cpp17 | Elfogadva | 32ms | 3240 KiB |
#include<bits/stdc++.h>
using namespace std;
struct pt{
int x,y;
};
pt operator+(const pt &l, const pt &r){
return pt{l.x+r.x,l.y+r.y};
}
pt operator-(const pt &l, const pt &r){
return pt{l.x-r.x,l.y-r.y};
}
bool operator<(const pt &l, const pt &r){
return tie(l.x,l.y)<tie(r.x,r.y);
}
bool operator==(const pt &l, const pt &r){
return tie(l.x,l.y)==tie(r.x,r.y);
}
pt rotl(pt p){
return pt{-p.y,p.x};
}
pt rotr(pt p){
return pt{p.y,-p.x};
}
pt rot(pt p){
return pt{-p.x,-p.y};
}
int main(){
vector<pt> d{{0,1},{1,0},{0,-1},{-1,0}}; int i=0;
string s; cin >> s; int n=s.size();
vector<pt> v; v.reserve(n+1); pt sum{0,0}; v.push_back(sum);
for(char c: s){
switch(c){
case 'F':
sum=sum+d[i];
break;
case 'R':
i++; if(i>3) i=0;
break;
case 'L':
i--; if(i<0) i=3;
break;
}
v.push_back(sum);
}
i=0; set<pt> positions;
for(int j=0;j<n;j++){
switch(s[j]){
case 'F':
positions.insert(v[j]+rotl(v[n]-v[j+1]));
positions.insert(v[j]+rotr(v[n]-v[j+1]));
break;
case 'R':
positions.insert(v[j]+rot(v[n]-v[j+1]));
positions.insert(v[j]+d[i]+rotl(v[n]-v[j+1]));
i++; if(i>3) i=0;
break;
case 'L':
positions.insert(v[j]+rot(v[n]-v[j+1]));
positions.insert(v[j]+d[i]+rotr(v[n]-v[j+1]));
i--; if(i<0) i=3;
break;
}
}
cout << positions.size() << '\n';
/*for(pt i: positions){*/
/* cout << i.x << ' ' << i.y << '\n';*/
/*}*/
}
3
Elvárt kimenet:3
Ellenőrző kimenete:ok 1 number(s): "3"
34389
Elvárt kimenet:34389
Ellenőrző kimenete:ok 1 number(s): "34389"
3355
Elvárt kimenet:3355
Ellenőrző kimenete:ok 1 number(s): "3355"
41690
Elvárt kimenet:41690
Ellenőrző kimenete:ok 1 number(s): "41690"
30736
Elvárt kimenet:30736
Ellenőrző kimenete:ok 1 number(s): "30736"
33948
Elvárt kimenet:33948
Ellenőrző kimenete:ok 1 number(s): "33948"
34519
Elvárt kimenet:34519
Ellenőrző kimenete:ok 1 number(s): "34519"
26668
Elvárt kimenet:26668
Ellenőrző kimenete:ok 1 number(s): "26668"
19065
Elvárt kimenet:19065
Ellenőrző kimenete:ok 1 number(s): "19065"
24051
Elvárt kimenet:24051
Ellenőrző kimenete:ok 1 number(s): "24051"
15004
Elvárt kimenet:15004
Ellenőrző kimenete:ok 1 number(s): "15004"
33443
Elvárt kimenet:33443
Ellenőrző kimenete:ok 1 number(s): "33443"
14721
Elvárt kimenet:14721
Ellenőrző kimenete:ok 1 number(s): "14721"
23380
Elvárt kimenet:23380
Ellenőrző kimenete:ok 1 number(s): "23380"
15615
Elvárt kimenet:15615
Ellenőrző kimenete:ok 1 number(s): "15615"
20447
Elvárt kimenet:20447
Ellenőrző kimenete:ok 1 number(s): "20447"
29690
Elvárt kimenet:29690
Ellenőrző kimenete:ok 1 number(s): "29690"
25230
Elvárt kimenet:25230
Ellenőrző kimenete:ok 1 number(s): "25230"
16860
Elvárt kimenet:16860
Ellenőrző kimenete:ok 1 number(s): "16860"
9160
Elvárt kimenet:9160
Ellenőrző kimenete:ok 1 number(s): "9160"
17329
Elvárt kimenet:17329
Ellenőrző kimenete:ok 1 number(s): "17329"
13575
Elvárt kimenet:13575
Ellenőrző kimenete:ok 1 number(s): "13575"
5038
Elvárt kimenet:5038
Ellenőrző kimenete:ok 1 number(s): "5038"
13363
Elvárt kimenet:13363
Ellenőrző kimenete:ok 1 number(s): "13363"
29598
Elvárt kimenet:29598
Ellenőrző kimenete:ok 1 number(s): "29598"
38908
Elvárt kimenet:38908
Ellenőrző kimenete:ok 1 number(s): "38908"