poj1502-我不喜欢长的英文题

来源:互联网 发布:适合更新的大数据产品 编辑:程序博客网 时间:2024/05/01 22:55

对我这种四级低分飘过的人来说,长的英文题是噩梦!我一开始以为求和,但看样例输出不同,就看别人的翻译,原来是求最大的,我意识到我是个大坑!

水题直解上代码,我的toInt函数是个累赘,可以用以下的方法来将字符串转换成指定类型:

atof()             将字符串转换成浮点数值
atoi()                 将字符串转换成整数值
atol()                 将字符串转换成长整数值
strtod()             将字符串转换成双精度型数值
strtol()             将字符串转换成长型数值

或者sscanf(s,"%d",&t);  

#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int INF=0x3f3f3f3f;const int maxn=105;int g[maxn][maxn];int dis[maxn],vis[maxn];void inti(int n){    for(int i=0;i<=n;i++){        for(int j=0;j<=n;j++)            g[i][j]=INF;    }    for(int i=0;i<=n;i++)g[i][i]=0;}int toInt(char s[],int n){    int ans=0;    if(s[0]=='x')return INF;    for(int i=0;i<n;i++){        ans=ans*10+(s[i]-'0');    }    return ans;}int dijkstra(int from,int n){    memset(vis,0,sizeof(vis));    for(int i=2;i<=n;i++)dis[i]=g[from][i];    dis[from]=0;    vis[from]=1;    for(int i=0;i<n;i++){        int x,MIN=INF;        for(int y=2;y<=n;y++)            if(!vis[y]&&dis[y]<MIN)                MIN=dis[x=y];        vis[x]=1;        for(int y=2;y<=n;y++)            dis[y]=min(dis[y],dis[x]+g[x][y]);    }    int MAX=0;    for(int i=2;i<=n;i++){        //printf("%d ",dis[i]);        MAX=max(MAX,dis[i]);    }    return MAX;}int main(){    //freopen("int.txt","r",stdin);    int n;    while(~scanf("%d",&n)){        inti(n);        char s[10];        for(int i=2;i<=n;i++){            for(int j=1;j<i;j++){                scanf("%s",s);                getchar();                g[j][i]=g[i][j]=toInt(s,strlen(s));            }        }        printf("%d\n",dijkstra(1,n));    }    return 0;}


0 0