MansurL
(Hertz)
19.Июнь.2023 09:43:42
1
Хотелось математически доказать, что при таком то 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;
}
Написал такой код, но не совсем понимаю, когда останавливать прогу
MansurL
(Hertz)
19.Июнь.2023 09:45:16
2
MansurL
(Hertz)
19.Июнь.2023 09:45:40
3
Каждый раз я прохожусь по деку и его заполняю остальными деками до тех пор, пока в остальных деках не empty, каждый цикл проверяю на то, если фронт дека равен i, то удаляю его
и так до тех пор пока все деки не емпти
Я не знаю когда нужно остановить программу
1 лайк
MansurL
(Hertz)
20.Июнь.2023 14:56:45
4
#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;
}
/*
*/
MansurL
(Hertz)
20.Июнь.2023 14:58:56
5
Теперь 60 из 61 тестов проходит, не понимаю почему один тест не проходит
MansurL
(Hertz)
21.Июнь.2023 14:57:57
6
Решил, дело было во флажках, т.к. рассмотрел случай, когда 2 контейнера, но один или оба пустые
4 лайка