3개의 댓글이 있습니다.
-
-
Taeyoon_Lee -
int arr[MAX]={0};
이걸 전역 변수로 선언해보세요~ 지역 변수로는 50만이나 되는 배열을 잡을 수 없어요.
15년 전 link
-
-
-
JongMan -
이싸람들이 결정적이지 않은 대답만 해주고 ㅋㅋㅋㅋㅋㅋㅋ
지금 약수의 개수 D 에 대해 2^D 로 모든 약수의 조합을 세어보고 계신데요, 이와 같은 방법으로는 절대 시간 안에 나올 수가 없습니다. 약수의 개수가 60, 70 넘어도 올라가는데 (40만 넘는 숫자 몇 개만 테스트해봐도 이와 같은 경우가 많죠: 400050 의 약수는 70개가 넘어용) 2^D 알고리즘이 시간 안에 동작할 리가 없겠죠. ^^;
그것보다는 동적 계획법을 사용하는 알고리즘을 작성하시는 게 좋은데요, 그거는 http://algospot.com/zbxe/?mid=editorial&document_srl=50135 요기 있는 에디토리얼을 참고하시길~
15년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
공상가
아래와 같이 소스를 작성했는데요, 이거 진짜 돌아버리겠네요 ;ㅁ;
}
bit_vector++;
if(bit_vector&(1<
sum+=arr[j];[이 글은 과거 홈페이지에서 이전된 글입니다. 원문보기]
#include
#define MAX 500000
int powc(int, int);
void program();
int main() {
int i, casen;
scanf("%d",&casen);
for(i=0;i
void program() {
int arr[MAX]={0};
long long bit_vector=0;
int num;
int sum=0;
int arrindex=0;
int i,j,k;
scanf("%d",&num);
for(i=1;i*i<=num;i++) {
if(!(num%i)) {
arr[arrindex++]=i;
if(num/i!=i&&num/i!=num) {
arr[arrindex++]=num/i;
}
}
}
for(i=0;i
sum=0;
for(j=0;j
}
}
if(sum==num) {
printf("not weirdn");
return;
}
}
printf("weirdn");
return;
}
int powc(int a, int b) {
if(b==0) return 1;
return a*powc(a,b-1);
}
계속 시간초과만 뜨고... 제가 어디서 더 최적화를 시킬 수 있을까요?;ㅅ;.....
누가 좀 지적좀..ㅠ_ㅠ;;
15년 전