设为首页 加入收藏

TOP

ZOJ Monthly, August 2014(二)
2015-07-20 17:49:05 来源: 作者: 【 】 浏览:8
Tags:ZOJ Monthly August 2014
=n || y<0||y>=m||g[x][y]=='X') continue; if(g[x][y]=='1') Cnt++; } if(g[i][j]=='1'){ if(Cnt<2 || Cnt>3){ gt[i][j] = '0';} else if(Cnt==2 || Cnt==3) {gt[i][j]='1';} }else if(g[i][j]=='0'){ if(Cnt==3) {gt[i][j] = '1';} else gt[i][j] = '0'; } } } for(int i=0; i
 
                            

-------------------------------------------------------------------------------


ZOJ 3805 Machine
有 n 个不同的机器,他们之间的生产关系构成一棵二叉树,要求使用管道把它们连接起来完成这个生产线,并使得整体的宽度最小 ,管道只有两种(具体形状参考题目),不能旋转管道。机器的输入和输出口 只有固定的3个位置。

?


简单二叉树遍历

?

#include
                             
                              
#include
                              
                                #include
                               
                                 #include
                                
                                  #include
                                 
                                   #include
                                  
                                    #include
                                    #include
                                    
                                      #include
                                     
                                       using namespace std; const int maxn = 10000 + 1000; vector
                                      
                                        g[maxn]; int n; int dfs(int u) { int res = 0; if(g[u].size()>=1){ res = dfs(g[u][0]); } if(g[u].size()>=2) { int tmp = dfs(g[u][1]); if(res == tmp) res = res + 1; else res = max(res, tmp); } return res; } int main() { int i, x; while(~scanf(%d, &n)) { for(int i=0; i<=n; ++i) g[i].clear(); for(int i=2; i<=n; ++i) { scanf(%d, &x); g[x].push_back(i); } int ans = dfs(1) + 1; printf(%d , ans); } return 0; } 
                                      
                                     
                                    
                                  
                                 
                                
                               
                              
                             


-------------------------------------------------------------------------------


ZOJ 3806 Incircle and Circumcircle
给你三角形外接圆和内切圆的半径(R,r),求出一个可行的三角形。
无解的情况(r>R/2)
然后我们能发现等腰三角形就能构造出所有的情况,于是只要算出等腰三角形的情况就好了。
然后二分三角形底边d,比较算出来的内切圆半径r’与r。

?

?

#include 
                             
                              
#include 
                              
                                #include 
                               
                                 double r, R; double h, x; double cal(double a) { double d = a / 2; h = sqrt(R * R - d * d) + R; x = sqrt(h * h + d * d); return a * x * x / (2 * R * (a + x + x)); } void solve() { double lx = 0, rx = sqrt(3.0) * R; double mid; for (int i = 0; i < 100; i++) { mid = (lx + rx) / 2; double tmp = cal(mid); if (tmp > r) rx = mid; else lx = mid; } cal((lx + rx) / 2); printf(%.10lf %.10lf %.10lf , mid, x, x); } int main() { while (~scanf(%lf%lf, &r, &R)) { if (r * 2 > R) printf(NO Solution! ); else solve(); } return 0; } 
                               
                              
                             


用下面的定理也能解出来。。。
欧拉定理(几何):设三角形的外接圆半径为R,内切圆半径为r,外心与内心的距离为d,则d^2=R^2-2Rr.

?

-------------------------------------------------------------------------------

?

ZOJ 3807 Just a Palindrome
给你一个长度最大为 105 的字符串,你可以选择两个位置,然后交换他们,求最长回文子串。
?

hash & SA 不会。。。。
-------------------------------------------------------------------------------

ZOJ 3808 The Sum of Unitary Totient
已知 Φ?(n)=(p1a1?1)(p2a2?1)?(prar?1),n=p1a1p2a2?pkak 。求 ∑Ni=1Φ?(i). n≤ 109


题意简单,可是想不出2s时限内的算法。 呵呵。。。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU1565方格取数(1)(状态压缩D.. 下一篇11922 - Permutation Transformer..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)