上海交大oj 1053 二哥的記憶體

2022-08-30 17:03:10 字數 1798 閱讀 7298

二哥買了一台記憶體非常非常大的電腦,以至於二哥寫程式直接開了乙個 100,000 * 100,000 的陣列都跑得很順暢。這個陣列初始被清零,二哥在其中的 n 個位置賦了值,然後他做了 m 次操作,每次操作為以下三個指令之一:

0 x y :交換陣列的 x 行與 y 行

1 x y :交換陣列的 x 列與 y 列

2 x y :讀取陣列當期 x 行 y 列的數

現在請你寫乙個程式,對於每次讀取,輸出記憶體中對應位置的數。

第 1 行:乙個整數 n 表示初始化了 n 個位置。

第 2..n+1 行:每行三個整數: x y z 表示陣列中 x 行 y 列的值被賦值為 z。

第 n+2 行:乙個整數 m 表示操作的數量

第 n+3..n+m+2 行:每行一條指令 op x y,其中 op 為 0 表示交換行,op 為 1 表示交換列,op 為 2 表示讀取操作。

陣列中乙個位置不會被賦值兩次。

對於每個讀取指令,輸出一行乙個整數,為記憶體中對應位置的數。

對 70% 的資料,陣列行列的下標範圍為 0..199,0≤n≤1000

, 0≤m≤2000

.對 100% 的資料,陣列行列的下標範圍為 0..99999, 0≤n≤10000

, 0≤m≤20000

.

3

0 1 1

1 0 2

2 2 3

90 0 1

2 0 0

2 1 1

2 2 2

1 0 1

0 0 1

2 0 0

2 1 1

2 2 2

213123

題目不難,就是開個陣列記錄下標,如果要優化的話可以排個序然後二分查詢,不過這題可以直接過。

但當我寫完以後發現無論如何都有幾個點過不了,這個bug隱藏的太深,費了好大功夫才找到。原因就是我交換乙個陣列的兩個位置的值時採用異或的辦法,結果就悲劇了,因為這兩個位置可能相同,這麼一來異或一下本來只改變乙個變數的值,現在由於實際上是同乙個變數,這麼一交換實際上就是變為零了。比如執行a ^= a,就這一步已經把a變為了零。

實際上貌似異或的辦法並不能提高效率,以後還是別裝逼了。

**:

1 #include 2 #include 3 #include 4

using

namespace

std;56

struct

arr13 }array[100005

];14

15int x[100005]; //

記錄下標

16int y[100005

];17

intn;

1819

void find(int a,int

b)28

} 29

if (!flag) printf("

%d\n

",0);30}

31int

main()

40 sort(array,array+n);

41 scanf("

%d",&m);

42for (int i = 0;i < m;++i)

4353

break;54

}55case1:

6162

break;63

}64default:67

}68}69

70return0;

71 }

view code

演算法之路之征服上海交大的oj 二哥摘蘋果

二哥摘蘋果 題目描述 二哥是乙個懶於行動的人,他想在摘蘋果之前知道自己能摘到多少蘋果,如果實在太少 蘋果樹很茂盛,主要是由於身高原因 他寧可坐在樹下等蘋果自己掉下來砸到頭上。輸入格式 輸入共有兩行。第1行有3個整數,分別表示二哥的身高 凳子的高度和蘋果的個數n。第2行有n個整數,分別表示每個蘋果的高...

交大oj 1008 二哥買期貨 C 總結

這個公式可以根據日期計算這一天是星期幾,具體公式如下 w d 2 m 3 m 1 5 y y 4 y 100 y 400 mod 7 這個函式返回的結果是0 6的整數,表示星期一到星期天 int getweeknumber int year,int month,int day return day ...

演算法之路之征服上海交大的oj 矩陣翻轉

矩陣翻轉 description 給定乙個正方形的整數矩陣,輸出將該矩陣按某一方向翻轉後的結果。input format 輸入第一行有乙個整數n,表示一共有n組資料 n不會為負數。之後有n組資料,對於每組資料 第一行有兩個整數a和b,分別表示正方形矩陣的邊長,以及翻轉的方向。當b 0時水平翻轉,當b...