|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 柿子饼同学 于 2022-6-25 20:15 编辑
题目 : https://www.luogu.com.cn/problem/P1518
(可以点题解) 这题目我过了 , 主要题解里有点看不懂 , 这个特征是什么鬼 , 为什么要这么算 , 有什么依据? 然后在什么样的题目中可以用起来?
下面有图 , 别走!!!
附上我的代码:- #include <bits/stdc++.h>
- using namespace std;
- long long cow_face = 0, man_face = 0;
- short dx[] = {-1, 0, 1, 0};
- short dy[] = {0, 1, 0, -1};
- short mx, my, cx, cy;
- char mp[12][12];
- int t = 0;
- void movement(){
- if(mp[mx+dx[man_face%4]][my+dy[man_face%4]] == '*'){
- man_face++;
- }
- else{
- mx += dx[man_face%4];
- my += dy[man_face%4];
- }
- if(mp[cx+dx[cow_face%4]][cy+dy[cow_face%4]] == '*'){
- cow_face++;
- }
- else{
- cx += dx[cow_face%4];
- cy += dy[cow_face%4];
- }
- t++;
- }
- int main(){
- ios::sync_with_stdio(0);
- for(int i = 1; i <= 10; i++){
- for(int j = 1; j <= 10; j++){
- cin >> mp[i][j];
- if(mp[i][j] == 'F'){
- mx = i; my = j;
- }
- if(mp[i][j] == 'C'){
- cx = i; cy = j;
- }
- }
- }
- for(int i = 0; i < 12; i++){
- mp[0][i] = '*';
- mp[i][0] = '*';
- mp[11][i] = '*';
- mp[i][11] = '*';
- }
- int i = 0;
- while(mx != cx || my != cy){
- if(i > 202){ // 随便猜的一个最大值 , 没想到过了
- t = 0;
- break;
- }
- movement();
- i++;
- }
- cout << t << endl;
- return 0;
- }
复制代码
谢谢解答~ |
-
-
|