Контейнеры с информатикс

Хотелось математически доказать, что при таком то n, и при таких то значениях нет решения

#include <bits/stdc++.h>
using namespace std;
void print(deque <int> d)
{
	while(!d.empty())
	{
		cout<<d.front()<<" ";
		d.pop_front();
	}
	cout<<"\n";
	return;
}
int main()
{
	int n;
	cin>>n;
	vector <deque <int>> de(n+1);
	for(int i=1;i<=n;i++)
	{
		int temp;
		cin>>temp;
		for(int j=1;j<=temp;j++)
		{
			int te;
			cin>>te;
			de[i].push_back(te);
		}
	}
	bool flag=true;
	int cnt=0;
	while (flag && cnt!=100)
	{
		cnt++;
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(i!=j)
				{
					while(!de[j].empty())
					{
						de[i].push_back(de[j].back());
						de[j].pop_back();
						cout<<j<<" "<<i<<"\n";
					}
				}
			}
			while(!de[i].empty() && de[i].front()==i)
			{
				de[i].pop_front();
			}
		}
		for(int i=1;i<=n;i++)
		{
			if(!de[i].empty())
			{
				flag=true;
				break;
			}
			else
			{
				flag=false;
			}
		}
	}
	if(flag) cout<<0;
	return 0;
}
Написал такой код, но не совсем понимаю, когда останавливать прогу

Задача №53. Контейнеры , ссылка на задачу

Каждый раз я прохожусь по деку и его заполняю остальными деками до тех пор, пока в остальных деках не empty, каждый цикл проверяю на то, если фронт дека равен i, то удаляю его
и так до тех пор пока все деки не емпти
Я не знаю когда нужно остановить программу

1 лайк
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int temp,tempi;
	vector <vector <int>> vec(n+1);
	if(n>=3)
	{
		for(int i=1;i<=n;i++)
		{
			cin>>temp;
			while(temp--)
			{
				cin>>tempi;
				vec[i].push_back(tempi);
			}
		}
		for(int i=2;i<=n;i++)
		{
			while(int(vec[i].size())!=0)
			{
				vec[1].push_back(vec[i][int(vec[i].size())-1]);
				cout<<i<<" "<<1<<"\n";
				vec[i].pop_back();
			}
		}
		while(int(vec[1].size())!=0)
		{
			if(vec[1][int(vec[1].size())-1]==1)
			{
				vec[2].push_back(1);
				vec[1].pop_back();
				cout<<1<<" "<<2<<"\n";
			}
			else
			{
				cout<<1<<" "<<vec[1][int(vec[1].size())-1]<<"\n";
				vec[vec[1][int(vec[1].size())-1]].push_back(vec[1][int(vec[1].size())-1]);
				vec[1].pop_back();
			}
		}
		while(int(vec[2].size())!=0)
		{
			if(vec[2][int(vec[2].size())-1]==1)
			{
				cout<<2<<" "<<1<<"\n";
				vec[1].push_back(1);
				vec[2].pop_back();
			}
			else
			{
				cout<<2<<" "<<3<<"\n";
				vec[3].push_back(2);
				vec[2].pop_back();
			}
		}
		while(int(vec[3].size())!=0 && vec[3][int(vec[3].size())-1]!=3)
		{
			if(vec[3][int(vec[3].size())-1]==1)
			{
				cout<<3<<" "<<1<<"\n";
				vec[1].push_back(1);
				vec[3].pop_back();
			}
			else if(vec[3][int(vec[3].size())-1]==2)
			{
				cout<<3<<" "<<2<<"\n";
				vec[2].push_back(2);
				vec[3].pop_back();
			}
		}
	}
	else if(n==2)
	{
		for(int i=1;i<=2;i++)
		{
			cin>>temp;
			while(temp--)
			{
				cin>>tempi;
				vec[i].push_back(tempi);
			}
		}
		vector <vector <int>> puma=vec;
		vector <string> ans;
		vector <string> ans1;
		bool flag1=0,flag2=0;
		while(int(vec[1].size())!=0 && vec[1][int(vec[1].size())-1]!=1)
		{
			ans.push_back("1 2");
			vec[2].push_back(2);
			vec[1].pop_back();
		}
		for(int i=0;i<int(vec[1].size());i++)
		{
			if(vec[1][i]==1)
			{
				flag1=1;
			}
			else
			{
				flag1=0;
				break;
			}
		}
		if(flag1)
		{
		for(int i=0;i<int(vec[2].size());i++)
		{
			if(vec[2][i]==2)
			{
				flag1=1;
			}
			else
			{
				flag1=0;
				break;
			}
		}
		}
		while(int(puma[2].size())!=0 && puma[2][int(puma[2].size())-1]!=2)
		{
			ans1.push_back("2 1");
			puma[1].push_back(1);
			puma[2].pop_back();
		}
		for(int i=0;i<int(puma[2].size());i++)
		{
			if(puma[2][i]==2)
			{
				flag2=1;
			}
			else
			{
				flag2=0;
				break;
			}
		}
		if(flag2)
		{
			for(int i=0;i<int(puma[1].size());i++)
			{
			if(puma[1][i]==1)
			{
				flag2=1;
			}
			else
			{
				flag2=0;
				break;
			}
			}
		}
		if(flag1)
		{
			for(int i=0;i<int(ans.size());i++)
			{
				cout<<ans[i]<<"\n";
			}
		}
		else if(flag2)
		{
			for(int i=0;i<int(ans1.size());i++)
			{
				cout<<ans1[i]<<"\n";
			}
		}
		else
		{
			cout<<0;
		}
	}
	return 0;
}
/*


*/

Теперь 60 из 61 тестов проходит, не понимаю почему один тест не проходит

Решил, дело было во флажках, т.к. рассмотрел случай, когда 2 контейнера, но один или оба пустые

4 лайка