思路:
- 模拟即可,代码写的时候又臭又长
代码:
class Solution {
public:
int unhappyFriends(int n, vector<vector<int>>& preferences, vector<vector<int>>& pairs) {
int ans=0;
map<int,int>temp;
for(int i=0;i<pairs.size();i++)
{
for(int j=0;j<pairs.size();j++)
{
if(i!=j)
{
int x=pairs[i][0];
int y=pairs[i][1];
int u=pairs[j][0];
int v=pairs[j][1];
int x_u=0;
int x_y=0;
int u_x=0;
int u_v=0;
if(temp[x]&&temp[y]&&temp[u]&&temp[v])
break;
for(int i=0;i<preferences[x].size();i++)
{
if(preferences[x][i]==u)
x_u=i;
if(preferences[x][i]==y)
x_y=i;
}
for(int i=0;i<preferences[u].size();i++)
{
if(preferences[u][i]==x)
u_x=i;
if(preferences[u][i]==v)
u_v=i;
}
if(x_u<x_y&&u_x<u_v&&(!temp[x]||!temp[u]))
{
if(!temp[x])
ans++;
if(!temp[u])
ans++;
temp[x]=1;
temp[u]=1;
}
if(temp[x]&&temp[y]&&temp[u]&&temp[v])
break;
swap(x,y);
for(int i=0;i<preferences[x].size();i++)
{
if(preferences[x][i]==u)
x_u=i;
if(preferences[x][i]==y)
x_y=i;
}
for(int i=0;i<preferences[u].size();i++)
{
if(preferences[u][i]==x)
u_x=i;
if(preferences[u][i]==v)
u_v=i;
}
if(x_u<x_y&&u_x<u_v&&(!temp[x]||!temp[u]))
{
if(!temp[x])
ans++;
if(!temp[u])
ans++;
temp[x]=1;
temp[u]=1;
}
if(temp[x]&&temp[y]&&temp[u]&&temp[v])
break;
swap(u,v);
for(int i=0;i<preferences[x].size();i++)
{
if(preferences[x][i]==u)
x_u=i;
if(preferences[x][i]==y)
x_y=i;
}
for(int i=0;i<preferences[u].size();i++)
{
if(preferences[u][i]==x)
u_x=i;
if(preferences[u][i]==v)
u_v=i;
}
if(x_u<x_y&&u_x<u_v&&(!temp[x]||!temp[u]))
{
if(!temp[x])
ans++;
if(!temp[u])
ans++;
temp[x]=1;
temp[u]=1;
}
if(temp[x]&&temp[y]&&temp[u]&&temp[v])
break;
swap(x,y);
for(int i=0;i<preferences[x].size();i++)
{
if(preferences[x][i]==u)
x_u=i;
if(preferences[x][i]==y)
x_y=i;
}
for(int i=0;i<preferences[u].size();i++)
{
if(preferences[u][i]==x)
u_x=i;
if(preferences[u][i]==v)
u_v=i;
}
if(x_u<x_y&&u_x<u_v&&(!temp[x]||!temp[u]))
{
if(!temp[x])
ans++;
if(!temp[u])
ans++;
temp[x]=1;
temp[u]=1;
}
}
}
}
return ans;
}
};