Concerned with the fitness levels of the players in the National Team, the coach decides to carry out a running drill in the next training session. So, he sets up checkpoints in the training ground at different positions.
After evaluating each player’s fitness, the coach asks each player to cover a certain minimum distance while completing all checkpoints (Suppose a players starts at checkpoint 2, then he must cover all checkpoints and finish at checkpoint 2).
Players being lazy want to finish the drill in exact distance that the coach assigns them. Is it possible?
Input description.
For each test case, output a single line containing the answer i.e. POSSIBLE or IMPOSSIBLE.
Input: 5 15 0 2 3 3 2 2 0 3 2 3 3 3 0 2 2 3 2 2 0 3 2 3 2 3 0 Output:POSSIBLE
http://www.codechef.com/problems/LAZY01
Dij表示i到j的距离。经过每个点后的总距离能否刚好等于15
#include<bits/stdc++.h> using namespace std; int main(){ int n,l,sum; int a[14][14],i,j,k; cin>>n>>l; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>a[i][j]; for(i=0;i<n;i++){ sum=0; for(j=0;j<n;j++){ for(k=0;k<n;k++){ if(sum<l){ sum+=a[i][k]+a[k][j]; //有点类似floyd,不过很巧妙的方法 } } } if(sum==l){ printf("POSSIBLE\n"); break; } } if(i==n) printf("IMPOSSIBLE\n"); return 0; }#include <stdio.h> int main(void) { int a,b,i,j,max=0,sum=0; scanf("%d%d",&a,&b); int arr[a][a]; for(i=0;i<a;i++) { for(j=0;j<a;j++) { scanf("%d",&arr[i][j]); } } for(i=0;i<a;i++) { for(j=i+1;j<a;j++) { if(arr[i][j]>max) { max=arr[i][j]; } } sum+=max; } if(sum>=b) printf("POSSIBLE"); else printf("IMPOSSIBLE"); return 0; }