Code Ptit
Code Ptit
#include <bits/stdc++.h>
int a[1000],n,ok;
void in(){
void kt(){
fort1(i,1,n) a[i]=0;
void sinh(){
int i=n;
while(i>=1&&a[i]==1){
a[i]=0;
--i;
}if(i==0) ok=0;
else a[i]=1;
int check(){
int l=1,r=n;
while(l<r){
if(a[l]!=a[r]) return 0;
l++;r--;
}return 1;
}
int main(){
cin >> n;
kt();
ok=1;
while(ok){
if(check()) in();
sinh();
#include <bits/stdc++.h>
int a[1000],n,ok,k,b[1000],cnt=0;
void in(){
fort1(i,1,n) {
void kt(){
fort1(i,1,n) a[i]=0;
void nhap(){
void sinh(){
int i=n;
while(i>=1&&a[i]==1){
a[i]=0;
--i;
}if(i==0) ok=0;
else a[i]=1;
int check(){
int sum=0;
fort1(i,1,n){
sum+=a[i]*b[i];
}if(sum!=k) return 0;
return 1;
int main(){
kt();
nhap();
ok=1;
while(ok){
if(check()) {
in();
++cnt;
sinh();
}
Bài 6: Xâu nhị phân kế tiếp
#include <bits/stdc++.h>
int main(){
int t;
cin >> t;
while(t--){
string s;
cin >> s;
forg1(i,s.length()-1,0){
if(s[i]=='1') s[i]='0';
else if(s[i]=='0'){
s[i]='1';
break;
#include <bits/stdc++.h>
int a[1000],n,k;
void sinh(){
int i=k;
while(i>=1&&a[i]==n-k+i) --i;
if(i==0){
fort1(j,1,k) a[j]=j;
else {
++a[i];
fort1(j,i+1,k) a[j]=a[j-1]+1;
int main(){
int t;
cin >> t;
while(t--){
sinh();
#include <bits/stdc++.h>
int a[1000],n,t;
int main(){
cin >> t;
while(t--){
cin >> n;
next_permutation(a,a+n);
#include <bits/stdc++.h>
int a[1000],n,k,t;
void in(){
a[i]=j;
if(i==k) in();
else Try(i+1);
int main(){
cin >> t;
a[0]=0;
while(t--){
Try(1);
#include <bits/stdc++.h>
int a[1000],n,t,check[1000];
void in(){
void kt(){
fort1(i,1,n) check[i]=1;
}
fort1(j,1,n){
if(check[j]){
a[i]=j;
check[j]=0;
if(i==n) in();
else Try(i+1);
check[j]=1;
int main(){
cin >> t;
while(t--){
cin >> n ;
kt();
Try(1);
#include <bits/stdc++.h>
void in(){
void kt(){
fort1(i,1,n) check[i]=1;
forg1(j,n,1){
if(check[j]){
a[i]=j;
check[j]=0;
if(i==n) in();
else Try(i+1);
check[j]=1;
int main(){
cin >> t;
while(t--){
cin >> n ;
kt();
Try(1);
}
Bài 12: Xâu AB có độ dài N
#include <bits/stdc++.h>
char a[1000];
int n,t;
void in(){
fort1(j,'A','B'){
a[i]=j;
if(i==n) in();
else Try(i+1);
int main(){
cin >> t;
while(t--){
cin >> n;
Try(1);
}
Bài 13: Xâu nhị phân có K bit 1
#include <bits/stdc++.h>
int a[1000],n,t,k;
void in(){
int check(){
int cnt=0;
fort1(i,1,n) {
if(a[i]==1) ++cnt;
}if(cnt==k) return 1;
return 0;
fort1(j,0,1){
a[i]=j;
if(i==n) {
if(check()) in();
}
else Try(i+1);
int main(){
cin >> t;
while(t--){
Try(1);
#include <bits/stdc++.h>
int n,t;
char s[2]={'A','H'},a[1000];
void in(){
int check(){
if(a[1]!='H'||a[n]!='A') return 0;
fort1(i,1,n) {
if(a[i]=='H'&&a[i+1]=='H') return 0;
}return 1;
fort1(j,0,1){
a[i]=s[j];
if(i==n) {
if(check()) in();
else Try(i+1);
int main(){
cin >> t;
while(t--){
cin >> n;
Try(1);
#include <bits/stdc++.h>
string s;
void sinh(){
forg1(i,s.length()-1,0){
if(s[i]=='1') {
s[i]='0';
break;
int main(){
cin >> t;
while(t--){
cin >> s;
sinh();
#include <bits/stdc++.h>
int n,k,t,a[1000],cnt,b[1000];
void nhap(){
fort1(i,1,k) {
cin >> a[i];
b[i]=a[i];
void sinh(){
int i=k;
while(i>=1&&a[i]==n-k+i) --i;
if(i!=0) {
++a[i];
fort1(j,i+1,n) a[j]=a[j-1]+1;
void cmp(){
fort1(i,1,k){
fort1(j,1,k){
if(a[i]==b[j]) --cnt;
int main(){
cin >> t;
while(t--){
nhap();
cnt=k;
sinh();
cmp();
}
Câu 17: Số thứ tự hoán vị
#include <bits/stdc++.h>
int a[1000],n,b[1000],ok;
void ktao(){
fort1(i,1,n) a[i]=i;
int so(){
fort1(i,1,n){
if(a[i]!=b[i]) return 0;
}return 1;
void sinh(){
int i=n-1;
while(i>=1&&a[i]>a[i+1]) --i;
if(i==0) ok=0;
else {
int j=n;
while(a[j]<a[i]) --j;
swap(a[i],a[j]);
int l=i+1,r=n;
while(l<r){
swap(a[l],a[r]);
++l,--r;
int main(){
int t;
cin >> t ;
while(t--){
cin >> n;
ok=1;
ll idx=1;
ktao();
while(ok&&so()==0){
++idx;
sinh();
#include <bits/stdc++.h>
int a[1000],n,b[1000],ok,k;
int so(){
fort1(i,1,k){
if(a[i]!=b[i]) return 0;
}return 1;
void sinh(){
int i=k;
while(i>=1&&a[i]==n-k+i) --i;
if(i==0) ok=0;
else {
++a[i];
fort1(j,i+1,k) a[j]=a[j-1]+1;
int main(){
int t;
cin >> t ;
while(t--){
ok=1;
ll idx=1;
ktao();
while(ok&&so()==0){
++idx;
sinh();
}
Câu 19: Đặt tên _ 1
#include <bits/stdc++.h>
int n,k;
string a[35];
int b[35];
set<string> s;
void nhap(){
fort1(i,1,n) {
string x;
cin >> x;
s.insert(x);
void in(){
fort1(j,b[i-1]+1,n-k+i){
b[i]=j;
if(i==k) in();
else Try(i+1);
int main(){
faster();
nhap();
int m=1;
for(auto x : s) {
a[m++] = x;
n=s.size();
b[0]=0;
Try(1);
#include <bits/stdc++.h>
int n,k,t,a[1000],ok;
void in(){
fort1(i,1,k) cout << (char)(a[i]+64);
void kt(){
fort1(i,1,k) a[i]=i;
void sinh(){
int i=k;
while(a[i]==n-k+i&&i>=1) --i;
if(i==0) ok=0;
else {
++a[i];
fort1(j,i+1,k) a[j]=a[j-1] + 1;
int main(){
cin >> t;
while(t--){
ok=1;
kt();
while(ok){
in();
sinh();
#include <bits/stdc++.h>
using namespace std;
int n;
char s[2]={'6','8'},a[1000];
void in(){
int check(){
if(a[1]!='8'||a[n]!='6') return 0;
fort1(i,1,n) {
if(a[i]=='8'&&a[i+1]=='8') return 0;
if(a[i]=='6'&&a[i+1]=='6'&&a[i+2]=='6'&&a[i+3]=='6') return 0;
return 1;
fort1(j,0,1){
a[i]=s[j];
if(i==n) {
if(check()) in();
else Try(i+1);
}
}
int main(){
cin >> n;
Try(1);
#include <bits/stdc++.h>
int n,a[10001],check[1000];
int b[10001];
void in(){
void ktao(){
fort1(i,1,n) check[i]=1;
fort1(j,1,n){
if(check[j]){
a[i]=j;
check[j]=0;
if(i==n) in();
else Try(i+1);
check[j]=1;
int main(){
cin >> n;
sort(b+1,b+n+1);
ktao();
Try(1);
#include <bits/stdc++.h>
int a[1000],n,b[1000],ok,k,l;
set<int> s;
void ktao(){
fort1(i,1,k) a[i]=i;
void sinh(){
int i=k;
while(i>=1&&a[i]==n-k+i) --i;
if(i==0) ok=0;
else {
++a[i];
fort1(j,i+1,k) a[j]=a[j-1]+1;
void in(){
int main(){
fort1(i,1,n){
int x;
cin >> x;
s.insert(x);
}n=s.size();l=1;
for(int x : s) {
b[l++]=x;
ok=1;
ktao();
while(ok){
in();
sinh();
}
Câu 24: Dãy số 1
#include <bits/stdc++.h>
if (n>0) {
fort(i,0,n-1)
fort(i,0,n-1)
a[i]=a[i]+a[i+1];
ql(a,n-1);
int main(){
faster();
t(){
int n;
cin >> n;
int a[n];
ql(a,n);