NYOJ 228 士兵殺敵(五)

題目鏈接:點擊...


對於這道題的解題思路,我只能說很吊,無結構無算法纔是最高境界吧!!!!

但是對於這道題的評判系統,我只能說臥槽了!!!!   java評測有誤!!!!

還有就是題目表述有問題!!!  請看:現已知共有M個士兵,編號爲0~M!!

    說了有M,編號的個數確實(M+1)個!!!!

5 3 2
1 3 2
2 4 1
5 5 10//但是看這組測試數據,編號確實從1到M,但是呢!!!!測試數據裏竟然有編號爲0的!!!
真實醉了,醉睡過去了!!!
但是呢,吐槽歸吐槽,這道題的解法還是相當新穎的,美,真的很美!!!

題目大意:編號爲1-M的士兵,都是連續殺敵的,殺敵之後每個人都增加一定的軍工,然後詢問從start到end的士兵的軍工和。
思路:第一開始,我還以爲是樹狀數組,插線問線,但是又想了想,數組數組是對於動態插入,查詢效率比較高,而這道題是靜態的,
就是都插入了,再查詢!!!   那樹狀數組就不一定是最優了!!!
上碼,碼上解釋!!!
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Main {
	public static void main(String[] args) throws IOException {
		InputStream mis = new MyInputStream();
		int[] arr = new int[1000005];
		int n, inputN, queryN, start, end, add;

		n = mis.read();
		inputN = mis.read();
		queryN = mis.read();

		while (inputN-- > 0) {
			start = mis.read();
			end = mis.read();
			add = mis.read();
///////////////////////////////////////////////////////////////
//這兩句是絕了!!!  我們輸入的是從start到end,每個士兵都增加軍工add,
//但是這裏只對arr[start]和arr[end+1]做處理,因爲後面要通過一個for循環,把前面一項
//加到當前一項,在start-end之間的都會加上add,在end之後加上add,又減去add!!!
//真不知道這種解法是誰想出來的!!!!!!
			arr[start] += add;
			arr[end + 1] -= add;
///////////////////////////////////////////////////////////////
		}
//一個for循環,把arr[i]變成第i士兵的軍工
		for (int i = 1; i <= n; i++) {
			arr[i] += arr[i - 1];
		}
//這個for循環,把arr[i]變成第一個到第i個士兵軍工的總和!!!
		for (int i = 1; i <= n; i++) {
			arr[i] = (arr[i] + arr[i - 1]) % 10003;
		}

		while (queryN-- > 0) {
			start = mis.read();
			end = mis.read();
			if (start == 0) {
				start = 1;
			}
<span style="white-space:pre">			</span>//這裏,有可能不確定start跟end的大小關係!!!
			System.out.println((arr[end] - arr[start - 1] + 10003) % 10003);
		}

		mis.close();
		mis = null;
	}
}

class MyInputStream extends InputStream {//改寫輸入流,提高速度
	private BufferedInputStream bis = new BufferedInputStream(System.in);

	public int read() throws IOException {
		int i, x = 0;
		while ((i = bis.read()) < '0' || i > '9')
			;//找到第一個數符
		while (i >= '0' && i <= '9') {//如果遇到非數符就退出
			x = x * 10 + i - '0';
			i = bis.read();
		}
		return x;
	}
}


這個代碼在nyoj上過不了!!!!!它的評測系統有錯誤!!!!坑爹!!!

發佈了38 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章