2021578 2006-08-14 23:10:47 Accepted 1092 C++ 00:00.37 856K St.Crux 输出的时候犯了一个小错误:"Yes"当作“YES”了。 这个题是很基础的最短路径题,不限次数倒买倒卖,求能否过一定的收益率(这里为1)。我记得uva上有一个题是问在t次交换内能否达到一定的汇率......那样似乎还要记录路径了......上次学校里搞选拔赛的时候做过,做不出。现在还是做不出 TAT 另,memset(a, 0, sizeof(a))对double数组无效。但可以写memset(a, 0x00, sizeof(a)) #include <iostream>#include <fstream>#include <cstring>#include <string>#include <map>using namespace std; double a[30][30];map<string, int> sm, dm;int n, c = 0, ac; int main(){ //ifstream cin("in.txt"); while(cin >> n && n) { sm = dm; int i, k, t, j; for(i = 0; i < n; i ++) { string s; cin >> s; sm[s] = i; for(k = 0; k < n; k ++) { a[i][k] = 0; //清零 } } cin >> t; for(i = 0; i < t; i ++) { string s0, s1; double td; cin >> s0 >> td >> s1; a[sm[s0]][sm[s1]] = td; } //pt(); for(j = 0; j < n; j ++) { for(i = 0; i < n; i ++) { for(k = 0; k < n; k ++) { if(a[i][j] * a[j][k] > a[i][k]) a[i][k] = a[i][j] * a[j][k]; //Floyd } } } //pt(); ac = 0; for(i = 0; i < n; i ++) { if(a[i][i] > 1) { ac = 1; break; } } printf("Case %d: ", ++ c); if(ac) printf("Yes\n"); else printf("No\n"); } return 0;}

评论