http://wenku.baidu.com/link?url=60wguK6BIogNTyNdq6UGESAPuUW5vAVyFKo_kltrPtxFchYi-B7De3sWqr4oAxKrmwoHv9vo-sNxVwcK7Hr6vSdBV9zmAvgEZE7Vg971z_a
HDU1588:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#define inf 0x3f3f3f3f
using namespace std;
char a[1001],b[1001],c[1001],d[1001];
int l,U,I,P,t1,t2,t3,v1,i1,w1;
void init()
{
U=inf;
I=inf;
P=inf;
t1=t2=t3=0;
}
int main()
{
int T;
scanf("%d",&T);
for(int z=1; z<=T; z++)
{
init();
gets(a);
cout<<a<<endl;
l=strlen(a);
for(int i=0; i<l; i++)
{
if(a[i]=='U')
{
for(int j=i+2; j<l; j++)
{
if(a[i]>='0'&&a[i]<='9')
{
b[t1++]=a[i];
}
else
{
if(a[i]=='k')
v1=1000;
else if(a[i]=='V')
v1=1;
break;
}
}
U=0;
}
else if(a[i]=='I')
{
for(int j=i+2; j<l; j++)
{
if(a[i]>='0'&&a[i]<='9')
{
c[t2++]=a[i];
}
else
{
if(a[i]=='m')
i1=0.001;
else if(a[i]=='A')
i1=1;
break;
}
}
I=0;
}
else if(a[i]=='P')
{
for(int j=i+2; j<l; j++)
{
if(a[i]>='0'&&a[i]<='9')
{
d[t3++]=a[i];
}
else
{
if(a[i]=='m')
w1=1000000;
else if(a[i]=='V')
w1=1;
break;
}
}
}
P=0;
}
b[t1]=' ';
c[t2]=' ';
d[t3]=' ';
printf("Problem #%d ",z);
double sum;
if(U==0&&I==0)
{
sum=atof(b)*atof(c)*v1*i1;
printf("P=%.00lfW ",sum);
}
else if(U==0&&P==0)
{
sum=atof(d)*w1/(atof(b)*v1);
printf("I=%.00lfA ",sum);
}
else if(I==0&&P==0)
{
sum=atof(d)*w1/(atof(c)*i1);
printf("U=%.00lfV ",sum);
}
cout<<endl;
}
return 0;
}
二分时可以这么写:
matrix Sum(matrix x, int k) { if(k==1) return x; if(k&1) return Add(Sum(x,k-1),Pow(x,k)); matrix tmp; tmp=Sum(x,k>>1); return Add(tmp,Mult(tmp,Pow(x,k>>1))); }
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
typedef struct Node
{
struct Node *next[26];
int flag;
} Node,*Tree;
int f1,l,tt;
char a[5002][210],CH[210];
void Creat(Tree &T)
{
T=(Node *)malloc(sizeof(Node));
T->flag=0;
for(int i=0; i<26; i++)
T->next[i]=NULL;
}
void insert(Tree &T,char *s)
{
Tree p=T;
int t;
int l=strlen(s);
for(int i=0; i<l; i++)
{
if(s[i]>='a'&&s[i]<='z')
t=s[i]-'a';
else t=s[i]-'A';
if(p->next[t]==NULL)
Creat(p->next[t]);
p=p->next[t];
}
p->flag=1;
}
void D(Tree p)
{
for(int i=0; i<26; i++)
{
if(p->next[i]!=NULL)
D(p->next[i]);
}
free(p);
}
void dfs(Tree &P,int r,int l)
{
if(P->flag>0)
{
CH[l]='a'+r;
CH[l+1]=' ';
printf("%s
",CH);
}
else CH[l]=CH[l]='a'+r;
for(int i=0; i<26; i++)
{
if(P->next[i]!=NULL)
dfs(P->next[i],i,l+1);
}
}
int main()
{
Tree T;
tt=0;
while(gets(a[tt])!=NULL)
{
tt++;
}
Creat(T);
char ch[210];
for(int i=0; i<tt; i++)
{
l=strlen(a[i]);
f1=0;
for(int j=0; j<l; j++)
{
if((a[i][j]>='a'&&a[i][j]<='z')||(a[i][j]>='A'&&a[i][j]<='Z'))
{
ch[f1++]=a[i][j];
}
else
{
ch[f1]=' ';
// printf("%s
",ch);
if(f1!=0)
insert(T,ch);
f1=0;
}
}
if(f1!=0)
{
ch[f1]=' ';
insert(T,ch);
//printf("%s
",ch);
}
}
for(int i=0; i<26; i++)
{
if(T->next[i]!=NULL)
dfs(T->next[i],i,0);
}
D(T);
return 0;
}