2021 CSP J試題詳解

2022-09-22 04:57:09 字數 3192 閱讀 8987

不得不說,這真的是一屆更水的題了,180一等線是真的低,感覺比前三屆簡單多了。

這個,,,水題沒什麼說的(注意!!你對了這道題就是二等獎!!)

#includeusing namespace std;

int n,l,r;

int main()

for(int i=1;i<=n;i++)

else if((a[i]>a[x]||a[i]==a[x]&&i>x)&&(a[i]在這裡肯定有人要問了用線段樹或者平衡樹怎麼寫尼???

我寫一下,學過的話思路簡單,沒學的話如讀天書:

平衡樹+離散化演算法

#includestructq[200001];

struct pair tr[3000010];

int cnt = 1;

void insert(lld x)

}void remove(lld x)

}int query(lld x)

return ret;

}int main()

int op, x, v;

for (int i = 1; i <= q; ++ i) else printf("%d\n", query((lld)a[x] * n + x - 1) + 1);

} return 0;

}

注意,這不是簡單的事情複雜化,是簡單的演算法你考試你根本想不出來。

這道題就是map資料結構基本功,以及string基本用法,沒什麼難的。

建乙個字串陣列存答案(即每台計算機連線狀態,**內為 a),再建乙個陣列 sum 存連線成功客戶機所對應的服務機編號,對於答案儲存講完了。

輸入部分較為簡單,我的變數名也與題目所述一致,就跳過。

然後講服務機重複位址,和客戶機連線的服務機編號。對於每個位址合法的服務機,我們用乙個 map 存它的位址和編號,記為

mapss;

這樣服務機重複位址的情況,看下位址對應的 map 是否為 0 就行了。至於客戶機,若它位址合法,看下位址對應的 map 是否為 0,為 0 則連線失敗,否則連線的服務機編號就是 ss 的第二個鍵值。

當然,有坑(csp—j第三和四題沒那麼水):

1.map 等清空。

2.位址不得出現除題目規定外的字元。

3.位址必須要有 5 個數(比如 10..9.7:2 就不行)

4.位址必須含有 3 個 . 與 1 個 :,且順序不能顛倒。

5.位址的 5 個數要符合題目規定的資料範圍。

6.位址的 5 個數不能含前導 0。

#include#define int long long

using namespace std;

int n,sum[10005];

string a[10005];

mapss;

signed main()

if(ad[i]==':')knf=1;

}

if(kf!=5)

for(int i=0;i='0'&&ad[i]<='9'))

sk+=ad[i];

}if(_1!=3||_2!=1||w==1)

for(int i=0;i=0&&ans<=255)

else

}if(i==0||ad[i-1]=='.'||ad[i-1]==':')

else}}

ans=ans*10+ad[i]-48;

}if(ans<0||ans>65535||w==1)

if(op[0]=='s')

else

}else

else}}

for(int i=1;i<=n;i++)

else printf("%lld",sum[i]);

printf("\n");

}return 0;

}

本次csp之所以簡單是因為沒考圖論,主要是資料結構基礎,所以很簡單,這個壓軸題也只需要建個雙向鍊錶就行。

首先對輸入序列建雙向鍊錶,維護每乙個「假塊」頭建雙向鍊錶,共維護兩個鍊錶。

這裡的「假塊」指每個「假塊」中水果種類必定相同,但相鄰「假塊」中水果種類可能相同。

我們可以使用雙向鍊錶的刪除元素來模擬吃乙個水果。

不斷迴圈遍歷「假塊」頭鍊錶,遍歷過程中記錄上乙個被吃水果種類。遍歷到某個塊頭時,若其指向的水果與上乙個被吃水果種類相同,直接將這個塊頭刪除,相當於合併塊;若不同,吃掉這個水果,更新上乙個被吃水果種類,將這個塊頭指向的水果變成被吃水果的下乙個水果。

關於乙個假塊被吃完的處理方法,此時這個假塊的塊頭一定會指向下乙個塊頭。若這個塊頭的種類與被吃水果的種類不同,刪掉這個塊,因為遍歷下乙個塊時將會吃掉這個水果;若相同,不動,因為接下來的過程將會把下乙個塊的塊頭刪除。這樣保證遍歷時不會出現長度小於一的假塊。若假塊沒有被吃完,其指向的下乙個水果一定與吃掉的種類相同,同樣不做任何處理。

每個水果被遍歷一次,每個塊被刪除一次,時間複雜度 o(n)。

#includeusing namespace std;

const int maxn = 2e5+10;

struct node;

int n;

int shuiguo[maxn];

node headlist[maxn];

node shuiguolist[maxn];

int cc;

void eatone(int pos)

void del(int pos)

void chi()

eatone(headlist[solo].val);

headlist[solo].val = shuiguolist[headlist[solo].val].next;

if (shuiguo[headlist[solo].val]!=nowcolor)

solo = headlist[solo].next;

nowcolor^=1;

} putchar('\n');

}int main()

shuiguo[0] = 2;

shuiguo[n+1] = 2;

headlist[0].next = 1;

for (int i = 1; i <= n; i++)

} while (shuiguolist[0].next!=n+1)

return 0;

}

網路連線(CSP J 2021 T3)

一道又臭又長的模擬題目。1.scanf d.d b,c 這裡是定了乙個格式如果不按格式來就不輸入後面的內容 程式中用來分離數字方便計算 2.sscanf a,d.d a,b 這是從a字串中讀入a和b他反回的是讀入了幾個數 程式中用來判斷格式是否正確 3.scanf c a 在 c前面加乙個空格可以直...

2021秋招部分筆試題

2021秋招部分筆試題彙總 企業提供原題 00 00 28 4 6 程式設計題 查詢二叉搜尋樹的葉子節點 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 給乙個二叉查詢樹 binary search tree 的前序遍歷結果陣列,列印出所有的葉子節點。輸入描述 輸入為...

中興2021批筆試題解

總結 人菜思維僵硬.jpg 做筆試感覺智商嚴重下降 以後得寫點正常的agc題之類的了 t1 題目大意 給出長度為n的排列,要求按順序插入排序二叉樹,問經過根節點的最長路徑長度。n 1 e5 n 1e5 n 1 e5奇怪的做法 把陣列進行排序後,把id給拿出來。例如 ai 5,3 2,1 6,7 4 ...