FOJ 1021 飛船賽

一,題目描述

      題目地址:  http://acm.fzu.edu.cn/problem.php?pid=1021

 

二,題目分析

1.暴力破解:根據題目給定的超車含義,由於在0秒內即可加速到最大速度,那麼只要位於後面的飛船的速度大於前面的飛船速度,即可發生超車現象。由於暴力破解時間複雜度過高,提交顯示超時

2.由於最大速度爲100,故開闢一個大小爲101空間speeds記錄最大速度的飛船數量,每次錄入一個飛船信息,實時更新。

speeds[i] :表示當前速度爲 i 的飛船,由題意可知,給定的非常位置是遞增的,所以每次錄入一個飛船的信息,對應的速度飛船數量加1,並且發生超車的次數就是已經錄入speed數組中速度大於該飛船的數量。

三,代碼解答

#include<vector>
#include<cstdio>
#include<iostream>
using namespace std;


 
int main() {
	int n;			//飛船數量
	int pos, speed;
	while (cin >> n) {
		vector<int> speeds(101, 0);
		int count = 0;				//發生超車的次數
		for (int i = 0; i < n; i++) {
			cin >> pos >> speed;			//輸入每個的位置 ,速度
			speeds[speed]++;
			for (int j = speed+1; j <= 100; j++) {
				count = count + speeds[j];
				count %= 1000000;		//取模運算
		    }
		}
		cout << count << endl;
	}
	return 0;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章