锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
/**//*
緇欏畾涓涓猲 < 2^31
鍦╗1,n]涓夊嚭涓浜涙暟錛屾瘡涓暟鍙互閫夊涓? 浣嗚姹備粬浠殑鍜屼負n
鑰屼笖鍙敤榪欎簺鏁拌兘鍞竴琛ㄧず[1,n]涓墍鏈夌殑鏁?br>
濡俷 = 5錛?nbsp;鏈墈1,1,1,1,1} {1,2,2} , {1,1,3}
鐪嬪埌n榪欎箞澶э紝搴旇鏄暟瀛︿箣綾葷殑鏂規硶鎴栬卨ogn錛宻qrt(n)涔嬬被鐨?br>
鎯充笉鍑烘庝箞緙╁皬瑙勬ā -_,- 
鐪嬭繖閲岀殑
http://knol.google.com/k/wenlei-xie/acm-icpc-dhaka-2007-%E8%A7%A3%E9%A2%98%E6%8A%A5%E5%91%8A/15moho0gp59j7/3#
棣栧厛蹇呴』鏈?錛岀劧鍚庢灇涓懼寘鍚玨涓?錛屽垯鑳借〃紺篬1,k]錛屽垯鎺ヤ笅鏉ョ殑鏁板氨鏄痥+1
濡傛灉鏈?涓猭+1錛屽垯[1,2k+1]閮借兘琚〃紺轟簡錛屾墍浠ヤ笅涓涓暟鍙兘鏄?(k+1)
濡傛灉鏈?涓猭+1錛屽垯[1,3k+2]閮借兘琚〃紺轟簡錛屾墍浠ヤ笅涓涓暟鍙兘鏄?(k+1)

浣嗘棤璁哄浣曪紝鎺ヤ笅鏉ョ殑鏁板彧鑳芥槸t(k+1)
鎵浠ヨ繖涓泦鍚堬紝闄や簡k涓?涔嬪錛屽叾浠栨暟閮芥槸t(k+1) , t >=1
鐢變簬闇瑕佸拰涓簄錛屾墍浠+1 | n-k
鎵浠ョ瓟妗堜負錛歠(n) = 鈭慺((n-k)/(k+1)) = 鈭慺((n+1)/(k+1)-1) k>=1, k+1 | n-k
杈圭晫涓篺(0) = 1
鍥犳鍙互鏋氫婦n+1鐨勫洜瀛愶紝sqrt(n+1)鐨勫鏉傚害錛屾湁鐐規參
鐢ㄤ釜map璁板綍涓嬬粨鏋?br>
浣嗚В棰樻姤鍛婇偅閲屾槸瀵筺鍒嗚В璐ㄥ洜瀛愪負∏pi^ai錛岀敤榪欑鏂規硶鍘繪灇涓懼洜瀛?br>
鍘勩傘傘傝繕娌¤瘯榪?nbsp;
*/
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
#include<stack>
#include<queue>
#include<cmath>
#include<string>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<set>
#include<list>
#include<numeric>
#include<cassert>
#include<ctime>
using namespace std;
map<unsigned int , long long> mp;

long long solve(unsigned int n)
{
map<unsigned int , long long>::iterator it = mp.find(n);
if (it != mp.end())
{
return it->second;
}
long long ans = 0;
for (unsigned int k = 1; k+1 <= (n+1)/(k+1) ; k++)
{
if ((n+1) % (k+1) == 0)
{
ans += solve((n+1)/(k+1) - 1);
unsigned int kk = (n+1)/(k+1);
if (kk != k+1)
{
ans += solve(k);//k+1-1
}
}
}
return mp[n] = ans + 1;
}
int main()

{
#ifndef ONLINE_JUDGE
//freopen("in","r",stdin);
#endif
mp[0] = 1;
int T, t = 1;
for (scanf("%d", &T); T-- ;)
{
unsigned int n;
scanf("%u", &n);
printf("Case %d: %lld\n", t++, solve(n));
}
return 0;
}
]]>
/**//*
鐩爣:min{鈭慶osti/鈭憀eni}
閫艱繎鐨勬濇兂錛屸垜costi/鈭憀eni<=x錛屽嵆 鈭?costi-x*leni)<=0 鏄竴涓崟璋冮掑噺鍑芥暟
鍗蟲眰杈逛負costi-x*leni鐨?nbsp;MST
鍙互鐢ㄤ簩鍒嗭紝浣嗘瘮杈冩參
鐢ㄨ凱浠e揩濂藉
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
const double esp=0.00001;
const int MAXN=1010;
const double DINF=1000000000.0;

struct Point
{
int x,y,z;
}points[MAXN];
int N;
bool vi[MAXN];
double dist[MAXN];
int pre[MAXN];

double cal(int a,int b)
{
return sqrt(1.*(points[a].x-points[b].x)*(points[a].x-points[b].x)+
1.*(points[a].y-points[b].y)*(points[a].y-points[b].y));
}

double prim(double x)
{
memset(vi,0,sizeof(vi));
for(int i=2;i<=N;i++)
{
dist[i]=abs(points[1].z-points[i].z)-cal(1,i)*x;
pre[i]=1;
}
dist[1]=0;vi[1]=1;
double cost=0,len=0;
for(int i=1;i<N;i++)
{
double Min=DINF;
int u;
for(int j=2;j<=N;j++)
if(!vi[j]&&Min>dist[j])
{
Min=dist[j];
u=j;
}
vi[u]=1;
cost+=abs(points[pre[u]].z-points[u].z);
len+=cal(pre[u],u);
for(int j=2;j<=N;j++)
{
double val=abs(points[u].z-points[j].z)-cal(u,j)*x;
if(!vi[j]&&dist[j]>val)
{
dist[j]=val;
pre[j]=u;
}
}
}
return cost/len;
}
int main()
{
while(scanf("%d",&N),N)
{
for(int i=1;i<=N;i++)
scanf("%d%d%d",&points[i].x,&points[i].y,&points[i].z);
//鍒嗘暟瑙勫垝鐢細Dinkelbach綆楁硶
//姣忔榪唬瀛愰棶棰樼殑瑙ost`/len`榪涘幓錛岃繖鏍蜂細涓嶆柇閫艱繎鏈浼樿В
double a=0,b;
while(1)
{
b=prim(a);
if(fabs(b-a)<esp)break;
a=b;
}
printf("%.3f\n",b);
}
return 0;
}

/**//*
//cost-len*x<=0
double low=0,high=100.0; //鍏跺疄浜屽垎20澶氭宸茬粡寰堣凍澶熶簡
while(high-low>esp){
double mid=(low+high)/2;
if(prim(mid))high=mid;
else low=mid;
}
printf("%.3f\n",high);
*/
]]>
http://blog.sina.com.cn/s/blog_5123df350100h3bu.html

/**//*
棰樼洰澶ф剰錛氱粰瀹歂緇寸┖闂寸殑涓浜涚偣錛屾眰鍔犳潈鏇煎搱欏胯窛紱繪渶榪戠殑涓や釜鐐圭殑璺濈銆?br>
鍒嗘瀽錛?nbsp;鏉冨煎彲浠ヤ箻鍒扮偣鍧愭爣涓婂幓錛屽氨鏄鍙互鎶婃瘡涓偣姣忎竴緇撮兘涔樹笂瀵瑰簲鐨剋[t]銆?br>
鑰冭檻2緇寸殑鎯呭喌 |x1-x2|+|y1-y2| 鏈澶у煎彧鏈?縐嶆儏鍐碉細
(x1+y1)-(x2+y2) , (-x1+y1)-(-x2+y2), (-x1-y1)-(-x2-y2), (x1-y1)-(x2-y2)錛?br>
鏈澶у兼槸4縐嶄箣涓錛岃繖閲岄潰鍙栨渶澶у氨鍙互浜嗐?br>
灝戒竴姝ョ湅鍒?縐嶅艦寮忥紝姣忕鑷韓絎竴涓偣鍜岀浜屼釜鐐瑰潗鏍囬棿鍔犳璐熷彿鐨勬柟娉曟槸涓鏍風殑銆?br>
鎺ㄥ箍鍒癗緇達紝鎴戜滑鏋氫婦鍔犵鍙風殑鏂瑰紡錛屼竴鍏憋紙1<<M錛夌錛岀劧鍚庡姣忕鏂瑰紡錛?br>
姣忎釜鐐圭殑鍧愭爣鎸夋灇涓劇殑鍔犳嫭鍙風殑鏂瑰紡N緇磋繍綆楁眰鍑轟竴涓兼潵錛屽彇鏈澶у拰鏈灝忓肩殑宸紝
浣滀負鍙兘緇撴灉錛屾渶鍚庡彇鎵鏈夊樊鍊間腑鏈澶х殑鍗沖彲銆傦紙娉ㄦ剰M寰堝皬錛屽彧鏈?錛夊鏉傚害O(2M*n)
*/
#include<cstdio>
#include<cstring>
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
const int MAXN=50001;
const int M=9;
const int inf=1000000000;
int cb[MAXN][M],w[M];
int n,m;

int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&cb[i][j]);
for(int j=1;j<=m;j++)
scanf("%d",&w[j]);
int limit=1<<m,ans=0;
for(int k=0;k<limit;k++)
{
int Max=-inf,Min=inf;
for(int i=1;i<=n;i++)
{
int tmp=0;
for(int t=0;t<m;t++)
{
if(k&(1<<t))tmp+=w[t+1]*cb[i][t+1];
else tmp-=w[t+1]*cb[i][t+1];
}
Max=max(tmp,Max);
Min=min(tmp,Min);
}
ans=max(ans,Max-Min);
}
printf("%d\n",ans);
}
return 0;
}
]]>