problemscpp
A collection of my answers to algorithm problems in c++.
Public 成员函数 | Private 属性 | 所有成员列表
acwing::acwing4217类 参考

AcWing 4217. 机器人移动 更多...

#include <acwing.h>

Public 成员函数

bool check (int len) const
 
int main (istream &cin, ostream &cout)
 

Private 属性

int a
 
int b
 
vector< pair< int, int > > back
 
vector< pair< int, int > > forth
 
unsigned int n
 
vector< char > ops
 

详细描述

AcWing 4217. 机器人移动

在文件 acwing.h902 行定义.

成员函数说明

◆ check()

bool acwing::acwing4217::check ( int  len) const

在文件 acwing.cpp2776 行定义.

2776 {
2777 for(int i = 0; i + len < n + 1; i++) {
2778 const auto s = forth[i];
2779 const auto e = back[i + len];
2780 const auto dist = abs(s.first - e.first) + abs(s.second - e.second);
2781 if(len - dist >= 0 && (len - dist) % 2 == 0) {
2782 return true;
2783 }
2784 }
2785 return false;
2786 }
unsigned int n
Definition: acwing.h:906
vector< pair< int, int > > back
Definition: acwing.h:905
vector< pair< int, int > > forth
Definition: acwing.h:904

引用了 back, forth , 以及 n.

被这些函数引用 main().

◆ main()

int acwing::acwing4217::main ( istream &  cin,
ostream &  cout 
)

在文件 acwing.cpp2703 行定义.

2703 {
2704 cin >> n;
2705 ops = vector<char>();
2706 forth = vector<pair<int, int>>();
2707 back = vector<pair<int, int>>();
2708 ops.resize(n);
2709 forth.emplace_back(0, 0);
2710 for(int i = 0; i < n; i++) {
2711 cin >> ops[i];
2712 switch(ops[i]) {
2713 case 'U': {
2714 forth.emplace_back(forth.back().first, forth.back().second + 1);
2715 break;
2716 }
2717 case 'D': {
2718 forth.emplace_back(forth.back().first, forth.back().second - 1);
2719 break;
2720 }
2721 case 'L': {
2722 forth.emplace_back(forth.back().first - 1, forth.back().second);
2723 break;
2724 }
2725 case 'R': {
2726 forth.emplace_back(forth.back().first + 1, forth.back().second);
2727 break;
2728 }
2729 }
2730 }
2731 cin >> a >> b;
2732 if(forth.back().first == a && forth.back().second == b) {
2733 cout << 0;
2734 return 0;
2735 }
2736 if(n < abs(a) + abs(b) || (n - (abs(a) + abs(b))) % 2 != 0) {
2737 cout << -1;
2738 return 0;
2739 }
2740 back.emplace_back(a, b);
2741 for(int i = n - 1; i >= 0; i--) {
2742 switch(ops[i]) {
2743 case 'U': {
2744 back.emplace_back(back.back().first, back.back().second - 1);
2745 break;
2746 }
2747 case 'D': {
2748 back.emplace_back(back.back().first, back.back().second + 1);
2749 break;
2750 }
2751 case 'L': {
2752 back.emplace_back(back.back().first + 1, back.back().second);
2753 break;
2754 }
2755 case 'R': {
2756 back.emplace_back(back.back().first - 1, back.back().second);
2757 break;
2758 }
2759 }
2760 }
2761 back = vector(back.rbegin(), back.rend());
2762 int l = 1;
2763 int r = n;
2764 while(l < r) {
2765 const int mid = (l + r) / 2;
2766 if(check(mid)) {
2767 r = mid;
2768 } else {
2769 l = mid + 1;
2770 }
2771 }
2772 cout << l;
2773 return 0;
2774 }
bool check(int len) const
Definition: acwing.cpp:2776
vector< char > ops
Definition: acwing.h:903

引用了 a, b, back, check(), forth, n , 以及 ops.

类成员变量说明

◆ a

int acwing::acwing4217::a
private

在文件 acwing.h907 行定义.

被这些函数引用 main().

◆ b

int acwing::acwing4217::b
private

在文件 acwing.h908 行定义.

被这些函数引用 main().

◆ back

vector<pair<int, int> > acwing::acwing4217::back
private

在文件 acwing.h905 行定义.

被这些函数引用 check() , 以及 main().

◆ forth

vector<pair<int, int> > acwing::acwing4217::forth
private

在文件 acwing.h904 行定义.

被这些函数引用 check() , 以及 main().

◆ n

unsigned int acwing::acwing4217::n
private

在文件 acwing.h906 行定义.

被这些函数引用 check() , 以及 main().

◆ ops

vector<char> acwing::acwing4217::ops
private

在文件 acwing.h903 行定义.

被这些函数引用 main().


该类的文档由以下文件生成: