PDA

View Full Version : مشکل کد داینامیک



sa1378
جمعه 07 آذر 1393, 15:02 عصر
سلام
سوالی که براش کد زدم اینه:
contest/471/problem/B (http://codeforces.com/contest/471/problem/B)
اول اینکه میخوام بدونم الگوریتمم درسته اصلا
if(case==true)
چرا پس جوابش غلطه
if(case==false)
الگوریتم درست چیه؟
کد:#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

#define N 2001
#define ll long long

ll n,a[N],b[N],output[N];
vector <ll> v[N];
bool mark[N];
void find(int x)
{
for(int i=0;i<n;i++)
if(b[x]==a[i] && mark[i]==false)
v[x].push_back(i+1);
}

void dynamic(int x)
{
if(x==n)
{
for(int i=0;i<n;i++)
cout<<output[i]<<" ";
cout<<endl;
}
else
{
find(x);
for(int i=0;i<n;i++)
{
cerr<<v[x][i];
output[x]=v[x][i];
mark[v[x][i]]=true;
dynamic(x+1);
mark[v[x][i]]=false;
}
}
}

int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
b[i]=a[i];
}
sort(b,b+n);
ll last=0,p=0,ans=1;
for(int i=0;i<n;i++)
{
if(last==0)
{
p++;
last=b[i];
}
else if(last==b[i])
p++;
else if(last!=b[i])
{
ans*=p;
p=1;
last=b[i];
}
}
if(p>1)
ans*=p;
if(ans<3)
{
cout<<"NO"<<endl;
return 0;
}
cout<<"YES"<<endl;
dynamic(0);




return 0;
}

rahnema1
جمعه 07 آذر 1393, 19:48 عصر
سلام
برنامه را تغییر دادم اما تست نکردم

#include <iostream>
#include <algorithm>
using namespace std;

#define N 2001
#define ll long long

ll n,a[N],index[N];

bool lower(const int& First, const int& Second)
{
return a[First] < a[Second];
}
int main()
{
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i];
index[i]=i;
}
sort(index, index + n, lower);
int tekrar[2];
int t=0;
for(int i=1; i<n; i++)
{
if (a[index[i]] == a[index[i - 1]])
{
tekrar[t++]= i;
}
if(t == 2)
{
cout << "YES\n";
break;
}
}
if (t<2)
{
cout << "NO";
return 0;
}
for(int i=0; i<n; i++)
cout<< index[i]+1;
cout<<"\n";
swap(index[tekrar[0]] ,index[tekrar[0] - 1]);
for(int i=0; i<n; i++)
cout<< index[i] + 1;
cout<<"\n";
swap(index[tekrar[1]] ,index[tekrar[1] - 1]);
for(int i=0; i<n; i++)
cout<< index[i] + 1;
}