1. 程式人生 > 其它 >【GDKOI】櫻花再見

【GDKOI】櫻花再見

技術標籤:c++GDKOI

櫻花再見


提交檔案: sakura.cpp
輸入檔案: sakura.in
輸出檔案: sakura.out
時間空間限制: 1s, 512MB

題目描述

畢業季,除了看學長學姐們穿著西裝、禮服、漂亮裙子拍畢業照,跟老師朋友說笑告別,一起在紀念冊
上留言,留下最後一份美好的回憶,沒畢業的低年級小朋友還要關注一下自己的期末考試成績。
小蝦籠的班上共有 n 個學生,她共有 k 科考試,每一科老師打分是 0 到 100 之間的任意實數。成績一科
一科地出,第 i 天會出第 i 科的成績,小蝦籠會知道她這一科在班上排名 ri。排名 r 意味著有 r 1 個同學
分數嚴格大於她的分數,同分的同學會有相同的排名。

儘管這是個不好的習慣,但小蝦籠總是喜歡預測自己的最終排名,對於所有 1 ≤ i ≤ k,你要回答她前 i
科成績的總和的排名最好和最壞分別是多少

輸入格式

第一行兩個正整數 n, k,表示學生數、考試科數。
第二行 k 個正整數 r1, · · · , rk,表示每一科的排名。

輸出格式

共 k 行,每行兩個正整數,第 i 行的兩個整數分別表示前 i 科成績總和的最好排名、最壞排名。

樣例資料

輸入

6 2
3 5

輸出

3 3
2 6

樣例解釋

出第 1 科成績之後,因為只有 1 科成績,所以總和的排名等於這一科的排名,都是 3;
出第 2 科成績之後,可使小蝦籠排名為 2 的一種成績是

在這裡插入圖片描述
可使小蝦籠排名為 6 的一種成績是
在這裡插入圖片描述
不存在使得小蝦籠排名為 1 的成績。

解題思路

這題主要是看思路,程式碼難度並不複雜。
我們先考慮最優排名,我們假設比我們高的人都是一百分,而我們則是無限接近於一百分,比我們低的都是零分,而比我們排名低過的人永遠不可能超過我們。那我們就把比我們排名高過的人數累加起來,如果比我們高的人數沒有超過總人數,我們就輸出總人數減去比我們高的人數,就是最優排名,如果超過了總人數,就說明我們是第一名。那最劣排名也是一樣的思路,假設比我們高的人都是一百分,比我們低的人都是零分,而我們則是無限接近於0分,比我們排名高過的人我們就永遠無法比他們高。那我們就把比我們排名高過的人數累加起來,如果超過了總人數,我們就是最後一名,否則就輸出比我們高過的人數,就是我們的最劣排名。

程式碼

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
	int n,k,r,zuiyou=0,zuilie=0;
	cin>>n>>k;
	for(int i=1;i<=k;i++)
	{
		scanf("%d",&r);
		zuiyou+=n-r;//累加比我們低過的人數
		if(n-zuiyou<0) cout<<1<<' ';
		else cout<<n-zuiyou<<' ';
		zuilie+=r;//累加比我們高過的人數
		if(zuilie>n) cout<<n<<endl;
		else cout<<zuilie<<endl;
	}
	return 0;
}

謝謝閱讀