UVALive:6182 Ginkgo Numbers
2013-07-27 18:47
302 查看
其实是一道挺简单的题,比较重要的信息就是提供的第一条充要条件。依据这个可以判断【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呢?不用太多技巧,只要挨个数试可以了。
这里要注意 1
< m2 + n2 < 20000 ,那么m或n最大是约是142,最小自然是-142,两个循环,暴力也不会超时。
计算过程中有一点要注意,除数是不能为0的,所以对m2 + n2要特判非0,否则一运行就会出错。
这道题比赛的时候也没做出来。现在想想当时特别认真的读完了题,其实也没读懂,还试图通过找规律来算出m,n来,但是不断经验表明这种统计个数的题用找规律和简单的计算公式往往是不靠谱的。而提供的数据范围是 1
< m2 + n2 < 20000给足了暗示:m,n范围都很小。而3000MS也不算短,这就暗示可以暴力解决了。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<algorithm> using namespace std; int main() { //freopen("in.txt","r",stdin); int T; scanf("%d",&T); while(T--) { int p,q; scanf("%d %d",&p,&q); int count=0; for(int i=-142;i<=142;++i) for(int j=-142;j<=142;++j) { long long a=i*i+j*j,b=i*p+j*q,c=i*q-j*p; if(a&&!(b%a)&&!(c%a)) count++; } if(count==8) printf("P\n"); else printf("C\n"); } return 0; }
相关文章推荐
- Palindrome Numbers UVALive - 2889
- UVaLIve 2889 | LA 2889 | UVa 12050 - Palindrome Numbers (组合数学)
- UVALive 7279 Sheldon Numbers 【位运算】【暴力】
- UVALIVE 2431 Binary Stirling Numbers
- UVALive2389 ZOJ1078 Palindrom Numbers
- UVALive3199 Specialized Four-Digit Numbers【进制】
- UVALive 7279 Sheldon Numbers
- UVALive 7279 Sheldon Numbers (暴力打表)
- UVALive-7279 - Sheldon Numbers【暴力】
- UVALive 6182 - Ginkgo Numbers
- UVA713 UVALive5539 POJ1504 ZOJ2001 Adding Reversed Numbers
- 2012年东京区域赛 UVAlive6182~6191
- UVALive3399 UVA1210 POJ2739 Sum of Consecutive Prime Numbers【素数筛选+尺取法】
- UVALive 6590 Digraphs
- UVALive 6847 Zeroes(找规律)
- UVALIVE 3346 Perfect Domination on Trees 树形DP
- UVALive - 7528 Beehive
- UVALive 5783 Everyone out of the Pool
- uva live 4731 Cellular Network 线性dp
- UVALive 4811 Growing Strings【AC自动机+简单dp】