Fork me on GitHub

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 }
复制代码

 

 

posted @   Gifur  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
TOP
点击右上角即可分享
微信分享提示