#include
using namespace std;
string ans[100001];
char d[100001];
int cnt = 1;
void func(int n, int index, int aCount, int bCount, int num){
if(index >= n){
if(num == cnt){
for(int i=0;i
ans[cnt] += d[i];
}
cout <
ans[cnt] = "";
}
cnt += 1;
return;
}
if(n - aCount > 2){
d[index] = 'a';
func(n, index+1, aCount + 1, bCount, num);
}
if(bCount
d[index] = 'b';
func(n, index+1, aCount, bCount + 1, num);
}
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
int t; cin >> t;
while(t--){
cnt = 1;
int n, k; cin >> n >> k;
func(n, 0, 0, 0, k);
}
return 0;
}
이렇게 재귀를 이용해서 풀었는데 시간초과가 뜨더라구요
다른 방법을 사용해야 하나요?
ideone이나 codehighlighter 이용해서 원본 소스코드 가져오시는게좋을듯
https://gall.dcinside.com/mgallery/board/view/?id=ps&no=3255&page=1
네
B는 완탐으로 하면 시간초과고 수학적으로 bb의 왼쪽 첫번째가 찍히는 t보다 짝은 어떤 수를 찾아야함 t=1 일때 b는 n-1번째에 찍히고 t=2 일때 n-2에 찍히고 t=4 일때 n-3에 찍힘 t값이 1 2 4 7 11 일때마다 n-n' 에 찍힘 이거 수학적으로 구하면됨
아 제가한게 완전탐색이군요 애초에 잘못된 방법이었네요 제가 어디서 최적화를 잘못했나 했는데 ㅠㅠ 답변 감사합니다
아 저렇게 소스코드 올릴수있군요 처음 글올려봐서ㅜㅜ 죄송합니다!
입력이 큰데 b는 단 두개니까 얘네 위치를 그냥 찾는다는 느낌으로 갔어야됨
감사합니다