杭電ACM 6463(思維)

2021-09-12 18:35:17 字數 690 閱讀 8619

突破口:乙個很大的數,假設是20位,其每個數字的平方的和不超過2000,因此只要將2000以內的鴿子數找出來,打表就可以。

**如下:

#include#includeusing namespace std;

long long ge[150005];

long long yes[2001]//yes記錄2000以內的鴿子數

bool search(int x,int y,int v) //二分查詢

return false;

}int p,q;

int main()

j=sum;

cnt++;

if(cnt>15) break; //避免無限循壞,當計算超過15次(足夠次數)就可以結束了。

}if(sum==1)

yes[p++]=i;

}for(i=0;i0)

if(search(0,p,sum))

ge[k++]=i; // printf("%d\n",i);

} //printf("%d\n",k);

scanf("%d",&q);

while(q--)

return 0;

}

小結:資料一大,但也不是大到離譜,可以考慮打表。

杭電 5560 思維

解題思路 因為只有 0 和 1 我們可以發現 1 只要過一次就可以了,但是 0 需要過兩次,需要過兩次肯定就需要邊上 的來幫助。1 比如1 0 0,num 0 1,走過去就不用管了,當走到num 1 0 時會把num 1 1 我們需要 num 2 0 的幫助 通過 num 2 0 我們可以把num ...

杭電ACM題目分類

基礎題 1000 1001 1004 1005 1008 1012 1013 1014 1017 1019 1021 1028 1029 1032 1037 1040 1048 1056 1058 1061 1070 1076 1089 1090 1091 1092 1093 1094 1095 1...

杭電acm 排列2

這題的核心演算法就是排列問題 就目前常用的排列演算法有兩種 一種是按字典列出排序,c stl所使用的方法,能夠支援重複元素的全排列。另外一種是使用遞迴生成排序。先說容易理解的一種方法,使用遞迴生成排序 例如1,2,3,4,這個序列。最開始,也就是遞迴最外層我們可以將其分成 1 2,3,4,2 1,3...