HDU ACM 1239 Calling Extraterrestrial Intelligence Again
Calling Extraterrestrial Intelligence Again
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3934 Accepted Submission(s): 2065
【题目链接】http://acm.hdu.edu.cn/showproblem.php?pid=1239
【解题思路】题目感觉是水过去,应该数据也是很水的一回事。题目长得也水,但最终水的还是自己,手贱的敲了那么长的时间,首先是筛出素数,找出最接近面积的素数作为一个待定的长然后一直在a/b 到 1 之间得到 待定的高,及时更新最大的面积,更新完待定的高后再继续更新待定的长,两个循环 PS:代码有点乱,因为我也是写给我自己的,目的是回看的时候还能找到点痕迹:这点痕迹就是,#ifndef 后面只能带ONLINE_JUDGE 写成其他比如说Joseph是不可以读取的;第二点是小心处理数据的范围
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<cmath> 6 #include<algorithm> 7 #define SIZE 60000 8 9 using namespace std; 10 11 int prime[SIZE], digit[SIZE]; 12 13 int init_prime() 14 { 15 memset(digit, 0, sizeof(digit)); 16 int sum = 0; 17 for(int i=2; i<=SIZE; ++i) 18 { 19 if(!digit[i]) 20 { 21 prime[sum++] = i; 22 // printf("%d ", i); 23 for(int j=i+i; j<=SIZE; j+=i) digit[j] = 1; 24 } 25 } 26 return sum; 27 } 28 29 30 int main() 31 { 32 #ifndef ONLINE_JUDGE 33 freopen("input.txt", "r", stdin); 34 #endif ONLIN_JUDGE 35 init_prime(); 36 // long long n; 37 int m, a, b, p, q, area; 38 while(scanf("%d%d%d", &m, &a, &b) != EOF && a+b+m) 39 { 40 area = 0; 41 int temp = m/2; 42 double rate = a*1.0/b; 43 int k; 44 for(k=0; prime[k] <= temp; ++k); 45 // printf("%d\n", prime[k-1]); 46 for(--k; k>=0; --k) 47 { 48 // n = (long long)prime[k]*prime[k]; 49 // if(area > n) { break;} 50 for(int t=k; t>=0 && a*prime[k] <= b*prime[t] ; --t) 51 { 52 if(area < prime[t]*prime[k] && prime[t]*prime[k] <= m) 53 { 54 p = prime[t]; 55 q = prime[k]; 56 area = p*q; 57 } 58 } 59 } 60 printf("%d %d\n", p, q); 61 } 62 return 0; 63 }
更多内容请关注个人微信公众号 物役记 (微信号:materialchains)
作者:雪影蓝枫
本文版权归作者和博客园共有,欢迎转载,未经作者同意须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。


浙公网安备 33010602011771号