社区讨论
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 条回复,欢迎继续交流。
正在加载回复...