问题:一个积木有两个头,用数字表示,N个积木之间相同数字可以拼接在一起,现在给出一堆积木,判断这对积木能不能拼接成功。要求:输入第一个数据是给出的测试用例的个数T,之后输入一个数据是积木的个数,然后是每块积木的两头的大小。
例如:
2
2
1 2
2 3
4
1 3
3 6
4 9
5 8
输出:
YES
NO
当时没有想到用mulset,其实可以用这个,不过我的思路也是在模拟这个mulset。但是最后提交代码显示只通过了百分之十的测试用例,然而并不知道出错在哪,大神求解。
bool Is_round(vector<int> &my_ve,vector<int> &ve_n,int i)
{
int left = i == 0 ? 0 : ve_n[i-1] * 2;
int right = ve_n[i] * 2 ;
//sort(my_ve[left],my_ve[right]);
vector<int>::iterator it1,it2;
it1 = my_ve.begin() + left;
it2 = my_ve.begin() + right;
sort(it1,it2);
int num = 0;
left++;
while(left < right)
{
if(my_ve[left] == my_ve[left-1])
{
left += 2;
}
else
{
left += 1;
num++;
}
}
if(my_ve[right-1] != my_ve[right-2])
num++;
if(num <= 2)
return true;
else
return false;
}
int main()
{
int t,m;
vector<int > ve_n;
vector<int > my_ve;
cin>>t;
for(int i = 0; i < t; ++i)
{
cin>>m;
ve_n.push_back(m);
for(int j = 0; j < m; ++j)
{
int tmp;
cin>>tmp;
my_ve.push_back(tmp);
cin>>tmp;
my_ve.push_back(tmp);
}
}
for(int i = 0; i < t; ++i)
{
if(Is_round(my_ve,ve_n,i))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}