# Array# Simulation

j353 - 瀏覽網站 (Web)

🔗 前往 ZeroJudge 原題

題目描述

題目描述一個模擬瀏覽網站的行為。輸入包含一系列指令,指令分為三種類型:

  1. 1 y: 表示瀏覽網站 y,將網站 y 的瀏覽次數加一。
  2. 0 y: 表示清除網站 y 的瀏覽紀錄,將網站 y 的瀏覽次數設為零。
  3. 2: 表示查詢目前所有網站的總瀏覽次數。

程式需要根據輸入的指令進行操作,並在收到 2 指令時輸出所有網站的總瀏覽次數。

解題思路

這題的解題思路非常直接。使用一個陣列 ct 來記錄每個網站的瀏覽次數。陣列的索引代表網站的編號,陣列的值代表該網站的瀏覽次數。 程式讀取輸入,根據指令類型進行相應的操作:

  • 如果指令是 1 y,則將 ct[y] 的值加一。
  • 如果指令是 0 y,則將 ct[y] 的值設為零。
  • 如果指令是 2,則計算 ct 陣列中所有元素的總和,並輸出結果。

複雜度分析

  • 時間複雜度: O(N + M),其中 N 是陣列 ct 的大小 (在本例中為 101),M 是輸入指令的數量。最壞情況下,需要遍歷整個陣列 ct 來計算總瀏覽次數。
  • 空間複雜度: O(N),其中 N 是陣列 ct 的大小。程式使用一個大小為 101 的陣列來儲存每個網站的瀏覽次數。

程式碼

#include <iostream>
using namespace std;
int x,y,ct[101];
int main(){
	while(cin >> x >> y){
		if(x==1){
			++ct[y];
		}
		else if(x==0){
			ct[y]=0;
		}
		else{
			int s=0;
			for(int i=0;i<=100;++i){
				s+=ct[i];
			}
			cout << s ;
			return 0;
		} 
	}
}

Discussion