problem 1092
来源:互联网 发布:windows 10 pro n 编辑:程序博客网 时间:2024/06/06 00:35
如果用Floyd算法做的话就纯粹是道背诵题,只不过变了一下权值累积的方式而已。
Accepted 1092 C++ 00:00.04 436K#include<stdio.h>
#include<string.h>
#include<stdlib.h>
float rate[31][31];
char c[31][20];
int cmp(const void *a,const void *b)
{
return strcmp((char*)a,(char*)b);
}
int binsearch(int p,int r,char key[])
{
while(p <= r)
{
int q = (p + r) / 2;
int temp = strcmp(key,c[q]);
if(temp == 0) return q;
else if(temp > 0) p = q + 1;
else r = q - 1;
}
return -1;
}
void solve(int n)
{
int m,i,j,k;
bool res = false;
for(i = 0; i < n; i++)
scanf("%s",c[i]);
qsort(c,n,20,cmp);
scanf("%d",&m);
for(j = 0; j < m; j++)
{
float r;
char s1[20],s2[20];
scanf("%s%f%s",s1,&r,s2);
int row = binsearch(0,n,s1);
int col = binsearch(0,n,s2);
rate[row][col] = r;
}
for(k = 0; k < n; k++)
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(rate[i][j] < rate[i][k] * rate[k][j])
rate[i][j] = rate[i][k] * rate[k][j];
for(i = 0; i < n && !res; i++)
if(rate[i][i] > 1) res = true;
res ? printf("Yes/n") : printf("No/n");
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1092.txt","r",stdin);
#endif
int n,t = 0;
while(scanf("%d",&n) != EOF && n != 0)
{
printf("Case %d: ",++t);
memset(rate,0,sizeof(rate));
solve(n);
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0;
}
#include<string.h>
#include<stdlib.h>
float rate[31][31];
char c[31][20];
int cmp(const void *a,const void *b)
{
return strcmp((char*)a,(char*)b);
}
int binsearch(int p,int r,char key[])
{
while(p <= r)
{
int q = (p + r) / 2;
int temp = strcmp(key,c[q]);
if(temp == 0) return q;
else if(temp > 0) p = q + 1;
else r = q - 1;
}
return -1;
}
void solve(int n)
{
int m,i,j,k;
bool res = false;
for(i = 0; i < n; i++)
scanf("%s",c[i]);
qsort(c,n,20,cmp);
scanf("%d",&m);
for(j = 0; j < m; j++)
{
float r;
char s1[20],s2[20];
scanf("%s%f%s",s1,&r,s2);
int row = binsearch(0,n,s1);
int col = binsearch(0,n,s2);
rate[row][col] = r;
}
for(k = 0; k < n; k++)
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(rate[i][j] < rate[i][k] * rate[k][j])
rate[i][j] = rate[i][k] * rate[k][j];
for(i = 0; i < n && !res; i++)
if(rate[i][i] > 1) res = true;
res ? printf("Yes/n") : printf("No/n");
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1092.txt","r",stdin);
#endif
int n,t = 0;
while(scanf("%d",&n) != EOF && n != 0)
{
printf("Case %d: ",++t);
memset(rate,0,sizeof(rate));
solve(n);
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0;
}
- problem 1092
- problem
- Problem
- problem
- Problem
- Problem
- Problem
- Problem
- Problem
- Problem
- problem
- Problem
- Problem
- Problem
- Problem
- Problem
- Problem
- Problem
- badi 你使用了没有
- 嵌入式系统开发,为什么选择
- Java -- 多线程技术基础(1) 方法详解
- 网页设计和设计灵感的12个无价站点
- Top10 Web2.0在线生成器
- problem 1092
- 世界顶尖网页设计师作品
- 网络
- 当代研究生英语读写教程的前5章译文
- WebChart使用
- .net 加密,授权。安全,解决方案 转自微软
- mssql2000 数据库 JDBC连接不上的原因
- 嵌入式Linux平台下的手机短信开发
- 一种新的组合优化遗传基因编码方法