社区讨论

50分求调玄关,样例1过不了

P1563[NOIP 2016 提高组] 玩具谜题参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjamuxm
此快照首次捕获于
2025/11/03 23:27
4 个月前
此快照最后确认于
2025/11/03 23:27
4 个月前
查看原帖
50分求调玄关,样例1过不了
代码如下
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
vector <bool> f; //朝向
vector <string> p; //职业

int main() {
    int ans = 1;

    ios::sync_with_stdio(false); 
    cin.tie(NULL);
    cout.tie(NULL);

    f.push_back(0);
    p.push_back("0");
    cin >> n >> m;
    for (int i = 1; i <= n; i++){ //以逆时针为顺序给出每个玩具小人的朝向和职业
        bool v; //0 表示朝向圈内,1 表示朝向圈外
        string s;
        cin >> v >> s;
        f.push_back(v);
        p.push_back(s);

    }

    // for (int i = 1; i <= n; i++){ //输出环
    //     cout << f[i] << ' ';
    //     cout << p[i] << ' ';
    //     cout << endl;

    // }

    // cout << f.size() << p.size();
    for (int j = 1; j <=m; j++){
        bool a;int s; 
        cin >> a >> s; //若a=0,表示向左数s个人;若a=1,表示向右数s个人
        

            if((f[ans] == 0 && a == 0) || (f[ans] == 1 && a == 1)){//面朝圈内向左&面朝圈外向右 数组向左走
                if((ans-s) >= 1){
                    ans = ans-s;
                }

                //f.size() - 1 是数组最后一位的下标,f.size()是数组元素总数

                else{
                    ans = ( (f.size() - 1) - (s - ans));
                }
            }
 
        


            if((f[ans] == 0 && a == 1) || (f[ans] == 1 && a == 0)){//面朝圈内向右&面朝圈外向左 数组向右走
                if((ans + s) <= (f.size()-1)){
                    ans = ans + s;
                }
                else{
                    ans = (s + ans) - (f.size() - 1);
                }
            }
            // cout << ans << endl;
        
    }

    cout << p[ans] << '\n';

    
    
    return 0;
}
测试记录详情:https://www.luogu.com.cn/record/234638340

回复

0 条回复,欢迎继续交流。

正在加载回复...