1. 程式人生 > >2018.12.30【NOIP提高組】模擬賽C組總結

2018.12.30【NOIP提高組】模擬賽C組總結

2018.12.30【NOIP提高組】模擬賽C組總結

今天成功迴歸開始做比賽
感覺十分良(zhōng)好(chà)。

  • 統計數字(count.pas/c/cpp)
  • 字串的展開(expand.pas/c/cpp)
  • 矩陣取數遊戲(game.pas/c/cpp)
  • 樹網的核(core.pas/c/cpp)
統計數字(count.pas/c/cpp) 100
字串的展開(expand.pas/c/cpp) 100
矩陣取數遊戲(game.pas/c/cpp) 0
樹網的核(core.pas/c/cpp) 10

統計數字(count.pas/c/cpp)

題目描述
某次科研調查時得到了n個自然數,每個數均不超過1500000000(1.5*109)。已知不相同的數不超過10000個,現在需要統計這些自然數各自出現的次數,並按照自然數從小到大的順序輸出統計結果。

輸入
輸入檔案count.in包含n+1行:

第1行是整數n,表示自然數的個數。
第2~n+1行每行一個自然數。

輸出
輸出檔案count.out包含m行(m為n個自然數中不相同數的個數),按照自然數從小到大的順序輸出。每行輸出兩個整數,分別是自然數和該數出現的次數,其間用一個空格隔開。

樣例輸入
8
2
4
2
4
5
100
2
100

樣例輸出
2 3
4 2
5 1
100 2

資料範圍限制

40%的資料滿足:1<=n<=1000
80%的資料滿足:1<=n<=50000
100%的資料滿足:1<=n<=200000,每個數均不超過1 500 000 000(1.5*10^9)

個人解析
這道題一拿到手,啊!~~~殺豬般的叫聲在機房裡迴響
第一眼想到的離散化,直接sort一遍再統計一下,AC

#include<cstdio>
#include<algorithm>
using namespace std;
int n,i,p,a[200001],t[10001
],k[10001]; bool cmp(int x,int y) { return x<y; } int main() { freopen("count.in","r",stdin); freopen("count.out","w",stdout); scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1,cmp); for (i=1;i<=n;i++) { if (a[i]!=a[i-1]) { t[++p]=1; k[p]=a[i]; }else t[p]++; } for (i=1;i<=p;i++) printf("%d %d\n",k[i],t[i]); }

字串的展開(expand.pas/c/cpp)

題目描述
在初賽普及組的“閱讀程式寫結果”的問題中,我們曾給出一個字串展開的例子:如果在輸入的字串中,含有類似於“d-h”或“4-8”的子串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母或數字串替代其中的減號,即,將上面兩個子串分別輸出為“defgh”和“45678”。在本題中,我們通過增加一些引數的設定,使字串的展開更為靈活。具體約定如下:

(1)遇到下面的情況需要做字串的展開:在輸入的字串中,出現了減號“-”,減號兩側同為小寫字母或同為數字,且按照ASCII碼的順序,減號右邊的字元嚴格大於左邊的字元。
(2)引數p1:展開方式。p1=1時,對於字母子串,填充小寫字母;p1=2時,對於字母子串,填充大寫字母。這兩種情況下數字子串的填充方式相同。p1=3時,不論是字母子串還是數字子串,都用與要填充的字母個數相同的星號“*”來填充。
(3)引數p2:填充字元的重複個數。p2=k表示同一個字元要連續填充k個。例如,當p2=3時,子串“d-h”應擴充套件為“deeefffgggh”。減號兩側的字元不變。
(4)引數p3:是否改為逆序:p3=1表示維持原有順序,p3=2表示採用逆序輸出,注意這時仍然不包括減號兩端的字元。例如當p1=1、p2=2、p3=2時,子串“d-h”應擴充套件為“dggffeeh”。
(5)如果減號右邊的字元恰好是左邊字元的後繼,只刪除中間的減號,例如:“d-e”應輸出為“de”,“3-4”應輸出為“34”。如果減號右邊的字元按照ASCII碼的順序小於或等於左邊字元,輸出時,要保留中間的減號,例如:“d-d”應輸出為“d-d”,“3-1”應輸出為“3-1”。

輸入
輸入檔案expand.in包括兩行:

第1行為用空格隔開的3個正整數,依次表示引數p1,p2,p3。
第2行為一行字串,僅由數字、小寫字母和減號“-”組成。行首和行末均無空格。

輸出
輸出檔案expand.out只有一行,為展開後的字串。

Sample Input1:
1 2 1
abcs-w1234-9s-4zz

Sample Output1:
abcsttuuvvw1234556677889s-4zz

Sample Input2:
2 3 2
a-d-d

Sample Output2:
aCCCBBBd-d

Sample Input3:
3 4 2
di-jkstra2-6

Sample Output3:
dijkstra2************6

資料範圍限制
【限制】

40%的資料滿足:字串長度不超過5
100%的資料滿足:1<=p1<=3, 1<=p2<=8, 1<=p3<=2。字串長度不超過100

個人解析