雖說是深搜,但是自己的代碼總是wa。。。
上網看了一些代碼,基本上都是同一個樣子
膜拜ing。。。
/******************************************************************************* # Author : Neo Fung # Email : neosfung@gmail.com # Last modified: 2012-04-07 20:29 # Filename: ZOJ1003 Crashing Balloon.cpp # Description : ******************************************************************************/#ifdef _MSC_VER#define DEBUG#define _CRT_SECURE_NO_DEPRECATE#endif#include <fstream>#include <stdio.h>#include <iostream>#include <string.h>#include <string>#include <limits.h>#include <algorithm>#include <math.h>#include <numeric>#include <functional>#include <ctype.h>#define MAX 101using namespace std;int flag1,flag2; void dfs(int x,int y,int n) { if(y==1) { flag2=1; if(x==1)flag1=1; //先分解較小數,所以較大數被分解(就是flag1置1)的條件是較小數已經被分解 } if(n>100 || flag1==1 && flag2==1) return;//遞迴出口:n超過100,或者兩個數都被分解 if(x%n==0) dfs(x/n,y,n+1); //大的數用因子n if(y%n==0) dfs(x,y/n,n+1); //小的數用因子n dfs(x,y,n+1); //都不用因子n} int main(void){#ifdef DEBUG freopen("../stdin.txt","r",stdin); freopen("../stdout.txt","w",stdout); #endif int a,b,t; while(~scanf("%d%d",&a,&b)) { if(a<b){t=a;a=b;b=t;} //確保a>b flag1=flag2=0; dfs(a,b,2); //從2開始搜尋 //printf("%d %d/n",flag1,flag2); if(flag2&&!flag1)printf("%d\n",b);//挑戰成功只有一種情況,就是較小數分解成功,大數失敗 else printf("%d\n",a); } return 0; }