Pitanje ili opis problema
Dobijam WA na svim primerima osim prvog, a čini mi se da je moj kod dobar, probao sam ga ručno. Ima li neko ideju o šta je problem? Vidim da već postoji topic o ovom zadatku ali tamo problem nije i dalje rešen.
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100
int a[MAXN],b[MAXN];
int n;
void printaj()
{
for(int i=0; i<n; ++i) cout<<a[i]<<" "; cout<<endl;
}
void f(int pos)
{
if(pos==n) return printaj();
for(int i=1; i<=n; ++i) {
if(b[i]) continue;
else {
b[i]=true;
a[pos]=i;
f(pos+1);
b[i]=false;
}
}
}
int main()
{
cin>>n;
f(0);
return 0;
}
Link ka zadatku ili odgovarajućoj stranici
https://petlja.org/biblioteka/r/problemi/zbirka-napredni-nivo/sve_permutacije
Sad cu ja da probam pa cu ti javiti
1 Like
Deluje mi da je problem do zadatka.
Za sada ne vidim problem sa zadatkom.
Testovi i ogranicenja su dobro podesena.
Napisao sam kod koji uporedjuje moje rezultate sa next_permutation funkcijom i nikada se ne razlikuje. Do čega bi moglo da bude?
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100
#define endl '\n'
#define all(a) a.begin(),a.end()
vector<int> bb;
vector<int> a,b(MAXN);
int n;
bool ima;
void printaj()
{
// if(ima) cout<<endl;
// for(int i=0; i<n; ++i) {
// if(i>0) cout<<' ';
// cout<<a[i];
// }
// ima=true;
if(a!=bb) { cout<<"FEJL"<<endl; exit(0); }
next_permutation(all(bb));
}
void f(int pos)
{
if(pos==n) return printaj();
for(int i=1; i<=n; ++i) {
if(b[i]) continue;
else {
b[i]=true;
a[pos]=i;
f(pos+1);
b[i]=false;
}
}
}
int main()
{
n=9;
while(n--)
{
b.resize(n);
bb.resize(n); fill(all(b),0);
a.resize(n);
for(int i=0; i<n; ++i) bb[i]=i+1;
f(0);
}
return 0;
}
Gregor je imao isti problem. Sve permutacije
Ima li nekih novosti? @NenadMilutinovic
Mislim da nema problema sa ovim zadatkom.
@gregor Jesi li rešio problem?
meni ovaj kod (koji bi trebao da bude perfektan) isto neće
import itertools
l =list(itertools.permutations(range(1, int(input())+1)))
for i in l:
for j in i:
print(j, end = " ")
print("")
Evo koda koji se cini apsolutno tacnim jer koristi ugradjenu next_permutation funkciju. Cak sam i pazio oko stampanja novog reda i razmaka jer mozda to pravi problem, i ponovo WA. Neka ideja sta je problem?
#include<bits/stdc++.h>
using namespace std;
#define all(a) a.begin(), a.end()
#define endl '\n'
#define PB push_back
#define fast ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define raz " "
#define F first
#define ll long long
#define S second
#define w(a) cout<<#a<<" : "<<a<<endl;
int main()
{
fast;
bool ind=false;
int n; cin>>n;
vector<int> a(n);
for(int i=0; i<n; ++i) a[i]=i+1;
do
{
if(ind) cout<<endl;
ind=true;
for(int i=0; i<n; ++i) {
if(i) cout<<' ';
cout<<a[i];
}
} while(next_permutation(all(a)));
return 0;
}
@NenadMilutinovic Ocigledno je problem u checkeru koji ne prihvata ispis koji je proizvoljan. Kada sam poslao kod koji stampa:
2 1
1 2
umesto recimo:
1 2
2 1
sto bi odstampao moj kod, prosao je drugi primer.
1 Like
Mozda samo da stavite u test primerima da budu permutacije poredjane leksikografski rastuce i da se to samo stavi u tekstu zadatka umesto da mogu biti poredjane u bilo kom poretku.
2 Likes
Sada je checker dodatno doradjen.
Potencijalni problem su bile beline ili visak istih.
2 Likes