UVALive 6182 - Ginkgo Numbers
2013-07-28 10:03
141 查看
其实是一道挺简单的题,比较重要的信息就是提供的第一条充要条件。
依据这个可以判断【m,n】是否为【p,q】的因子。
怎么找到这些符合的m,n呢?不用太多技巧,只要挨个数试可以了。
这里要注意 1
< m2 + n2 < 20000 ,那么m或n最大是约是142,最小自然是-142,两个循环,暴力也不会超时。
计算过程中有一点要注意,除数是不能为0的,所以对m2 + n2要特判非0,否则一运行就会出错。
这道题比赛的时候也没做出来。现在想想当时特别认真的读完了题,其实也没读懂,
还试图通过找规律来算出m,n来,但是不断经验表明这种统计个数的题用找规律和简单的计算公式往往是不靠谱的。
而提供的数据范围是 1
< m2 + n2 < 20000给足了暗示:m,n范围都很小。而3000MS也不算短,这就暗示可以暴力解决了。
依据这个可以判断【m,n】是否为【p,q】的因子。
怎么找到这些符合的m,n呢?不用太多技巧,只要挨个数试可以了。
这里要注意 1
< m2 + n2 < 20000 ,那么m或n最大是约是142,最小自然是-142,两个循环,暴力也不会超时。
计算过程中有一点要注意,除数是不能为0的,所以对m2 + n2要特判非0,否则一运行就会出错。
这道题比赛的时候也没做出来。现在想想当时特别认真的读完了题,其实也没读懂,
还试图通过找规律来算出m,n来,但是不断经验表明这种统计个数的题用找规律和简单的计算公式往往是不靠谱的。
而提供的数据范围是 1
< m2 + n2 < 20000给足了暗示:m,n范围都很小。而3000MS也不算短,这就暗示可以暴力解决了。
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; int main() { //freopen("in.txt","r",stdin); int p,q,cas,ans; scanf("%d",&cas); while(cas--) { scanf("%d%d",&p,&q); ans=0; for(int m=-145; m<=145; m++) { for(int n=-145; n<=145; n++) { int a=m*m+n*n; if(a==0) continue; int b=m*p+n*q; int c=m*q-n*p; if(b%a==0&&c%a==0) ans++; } } if(ans==8) cout<<"P"<<endl; else cout<<"C"<<endl; } return 0; }
相关文章推荐
- UVALive:6182 Ginkgo Numbers
- 2012年东京区域赛 UVAlive6182~6191
- UVALIVE 3637 The Bookcase <dp + 动态规划>
- HDU1334 ZOJ1331 UVA386 UVALive5303 Perfect Cubes【暴力】
- UVALive - 2222 Garland 公式
- UVALive - 6801 Sequence
- UVALive 2995 Image Is Everything
- UVALive - 3644 X-Plosives (并查集)
- POJ2945 UVALive3527 Find the Clones【字符串排序】
- UVALive 6184_One-Dimensional Cellular Automaton(矩阵快速幂)
- UVALive 7334 Kernel Knights (dfs)
- Let's Go Green UVALive - 6039
- UVAlive 5135 Mining Your Own Business [点双连通分量] [求割顶]
- Remember the Word - UVaLive 3942 Trie树+dp
- UVALive 7040 (容斥)
- UVALive - 4255 - Guess (拓扑排序)
- UVALive 4329 Ping pong(解法二:树状数组)
- POJ1003 UVALive2294 HDU1056 ZOJ1045 Hangover【数学计算+水题】
- G - Meeting Room Arrangement UVALive - 6606——动态规划
- UVALive - 6886 Golf Bot 多项式乘法(FFT)