社区讨论
萌新不会用宏定义求助
P4997不围棋参与者 6已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @lobut34j
- 此快照首次捕获于
- 2023/10/30 03:18 2 年前
- 此快照最后确认于
- 2023/11/04 08:08 2 年前
我为了图省事,我用了
CPP#define mp(x) mp[x.first][x.second]
#define fa(x) fa[x.first][x.second]
#define S(x) s[x.first][x.second]
提示语:
CPP1.cpp:19:18: error: ‘std::set<std::pair<int, int> >::iterator’ has no member named ‘first’
#define S(x) s[x.first][x.second]
^
1.cpp:53:8: note: in expansion of macro ‘S’
if(S(*it).size()==1)is=1;
^
1.cpp:19:27: error: ‘std::set<std::pair<int, int> >::iterator’ has no member named ‘second’
#define S(x) s[x.first][x.second]
1.cpp:5:20: error: ‘std::set<std::pair<int, int> >::iterator’ has no member named ‘first’
#define mp(x) mp[x.first][x.second]
^
1.cpp:63:7: note: in expansion of macro ‘mp’
if(mp(*it)!=(who?'X':'O')&&S(find(*it)).size()==1)is=1;
^
1.cpp:5:29: error: ‘std::set<std::pair<int, int> >::iterator’ has no member named ‘second’
#define mp(x) mp[x.first][x.second]
^
1.cpp:63:7: note: in expansion of macro ‘mp’
if(mp(*it)!=(who?'X':'O')&&S(find(*it)).size()==1)is=1;
^
为什么编译器会认定 x 是一个迭代器?
完整代码:
CPP#include<bits/stdc++.h>
using namespace std;
int n;
char mp[605][605];
#define mp(x) mp[x.first][x.second]
inline pair<int,int> P(int i,int j){
return make_pair(i,j);
}
queue<pair<int,int> >vec;
vector<pair<int,int> >q;
pair<int,int> fa[605][605];
#define fa(x) fa[x.first][x.second]
pair<int,int> find(pair<int,int> x){
if(fa(x)==x)return x;
return fa(x)=find(fa(x));
}
int dx[]={-1,0,0,1},dy[]={0,-1,1,0};
set<pair<int,int> >s[605][605];
#define S(x) s[x.first][x.second]
map<pair<int,int>,int>mpa[2];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",mp[i]+1);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
fa(P(i,j))=P(i,j);
if(mp[i][j]=='.')continue;
for(int t=0;t<4;t++){
int x=i+dx[t],y=j+dy[t];
if(mp[i][j]==mp[x][y])fa(find(P(i,j)))=find(P(x,y));
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mp[i][j]=='.')continue;
for(int t=0;t<4;t++){
int x=i+dx[t],y=j+dy[t];
if(mp[x][y]=='.'){
S(find(P(i,j))).insert(P(x,y));
S(P(x,y)).insert(find(P(i,j)));
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mp[i][j]!='.')continue;
bool is=0;
for(set<pair<int,int> >::iterator it=S(P(i,j)).begin();it!=S(P(i,j)).end();it++){
if(S(*it).size()==1)is=1;
}if(!is)vec.push(P(i,j));
}
}
int who=0;
while(!vec.empty()){
pair<int,int> x=vec.front();vec.pop();
if(vec.empty())while(!q.empty())vec.push(q.back()),q.pop_back();
bool is=0;
for(set<pair<int,int> >::iterator it=S(x).begin();it!=S(x).end();it++){
if(mp(*it)!=(who?'X':'O')&&S(find(*it)).size()==1)is=1;
}
if(is){
mpa[who][x]=1;
if(!mpa[!who].count(x))q.push_back(x);
continue;
}
printf("%d %d\n",x.first,x.second);
if(who)mp(x)='X';
else mp(x)='O';
for(int t=0;t<4;t++){
int a=x.first+dx[t],b=x.second+dy[t];
if(mp(x)==mp[a][b]){
S(P(a,b)).insert(S(find(x)).begin(),S(find(x)).end());
S(find(x)).clear();
fa(find(x))=find(P(a,b));
}
}
for(set<pair<int,int> >::iterator it=S(x).begin();it!=S(x).end();it++){
S(find(*it)).erase(x);
}
}
puts("-1 -1");
return 0;
}
回复
共 10 条回复,欢迎继续交流。
正在加载回复...