// 本题属于模拟题,题意的理解很重要,选个出发点能绕所有城市一圈回到出发点。 // 实际就是看油够不够。若把所有油与所有路长直接加要出错,应该是数据超范围的缘故。 // 改正这个错想了好久,几乎要放弃了。细心很重要。信心也很重要。 // 另外cin要超时。 #include < iostream > #include < vector > using namespace std; struct Car ... { int oil,dist;} ; bool check(Car a) ... { return a.oil>=a.dist;} bool run() ... { int i,n; if (scanf("%d",&n)==EOF) return false; vector <Car> car(n); for(i=0;i<n;i++) scanf("%d%d",&car[i].oil,&car[i].dist); for(i=0;i<n;i++) ...{ if (check(car[i])==false) continue; int j=i,oil=car[i].oil-car[i].dist; while(true) ...{ j=(j+1)%n; if (i==j) ...{ printf("%d ",i); return true; } oil+=car[j].oil-car[j].dist; if (oil<0) break; } } if(i==n) printf("impossible "); return true;} int main() ... { while(run()); return 0;}