z

 http://wenku.baidu.com/link?url=60wguK6BIogNTyNdq6UGESAPuUW5vAVyFKo_kltrPtxFchYi-B7De3sWqr4oAxKrmwoHv9vo-sNxVwcK7Hr6vSdBV9zmAvgEZE7Vg971z_a

HDU1588:

#include <iostream>
#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;
}

原文地址:https://www.cnblogs.com/zhangmingcheng/p/4127523.html