這個題其實並不難想,跑道長400M,給頂N米的總長度,M個運動員和他們的當前位置,允許套圈,問這個排名是否合法?大概思路就是最小假設,若第一名確實比第二名大,第二名確實比第三名大……則忽略之,若小,則前面的人加一圈。如此反復下去,判斷第一名有沒有超出給定的距離。結果加圈的時候出了一點問題,圈*400應該是全局變量的,比較的時候不能只比較前一個。 好吧,細節決定成敗。 [cpp] #include <iostream> #include <algorithm> using namespace std; class runner { public: int meter; int rank; }; bool cmp(runner n1,runner n2) { return n1.rank<n2.rank; } int main() { int testcase; cin>>testcase; while(testcase--) { int taoquanshu=0; runner pack[115]; int maxroute,yu; int athlete,distance; cin>>athlete>>distance; maxroute=(distance/400)-1; yu=distance%400; for(int i=0;i<athlete;i++) { cin>>pack[i].meter>>pack[i].rank; } sort(pack,pack+athlete,cmp); for(int j=0;j<athlete-1;j++) { if(pack[j].meter>pack[j+1].meter) { continue; } else { taoquanshu++; } } if((taoquanshu*400+pack[athlete-1].meter)>distance) { cout<<"NO"<<endl; } else { cout<<"YES"<<endl; } } return 0; }