日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二进制异或--7.18待完善

發布時間:2025/4/5 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二进制异或--7.18待完善 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于一個數組a1a_1a1?a2a_2a2?,……,ana_nan?,定義如下函數fff

f(a1,a2,……,an)={a1,n=1f(a1⊕a2⊕a3⊕……an?1⊕an),n>1f(a_1,a_2,……,a_n)=\left\{ \begin{aligned} a_1 , & {n=1}\\ f(a_1 \oplus a_2 \oplus a_3 \oplus …… a_{n-1} \oplus a_n), & {n>1} \\ \end{aligned} \right. f(a1?,a2?,an?)={a1?,f(a1?a2?a3?an?1?an?),?n=1n>1?

其中⊕代表二進制異或。現在進行qqq次詢問,每次詢問給定一段區間[l,r][l, r][l,r],你需要找出a1a_1a1?a2a_2a2?,……,ara_rar?的一個子區間,使得這個區間的fff值盡可能大。
請編寫程序(編程語言不限),對“附件1.txt”和“附件2.txt”中的數據進行求解,輸出結果請分別放在兩個文本文件“1-ans.txt”和“2-ans.txt”中提交.
“附件1.txt”和“附件2.txt”的格式說明如下:

第一行,一個正整數nnn
第二行,nnn個正整數,第iii個數為aia_iai?(0≤ai<2300 \le a_i<2^{30}0ai?<230);
第三行為一個正整數qqq
接下來的qqq行,每行都有兩個數字l,r(l≤r)l,r(l \le r)l,r(lr),代表一次詢問。
輸出文件 1-1-ans.txt 和 1-2-ans.txt 的格式說明如下:
輸出qqq行,一行一個整數,代表答案。

樣例1:

輸入數據輸出結果
35
8 4 112
2
2 3
1 2

樣例2:

輸入數據輸出結果
660
1 2 4 8 16 3230
412
1 63
2 5

樣例理解

第一行,一個正整數nnn,表示第二行有nnn個數,如:3;
第二行,nnn個正整數,第iii個數為aia_iai?(0≤ai<2300 \le a_i<2^{30}0ai?<230);
第三行,一個正整數qqq,表示接下來有qqq行;
接下來的qqq行,每行都有兩個數字l,r(l≤r)l,r(l \le r)l,r(lr),代表一次詢問。如樣例1中,第四行為2 3 ,表示對第二行的三個數(8 4 1)的第2個數到第3個數兩兩進行異或操作并獲取最大值;第五行為1 2 ,表示對第二行的三個數(8 4 1)的第1個數到第2個數兩兩進行異或操作并獲取最大值。

In [1]: 4^1 Out[1]: 5In [2]: 8^4 Out[2]: 12

如上,樣例一輸出結果為5、12

解題思路

兩正整數的異或結果為非負數

關鍵步驟

完整代碼–python

import linecache import numpy as npfileName='附件2.txt' file1 = open("2-ans.txt", "a")''' TODO: 將txt文本中用逗號分割的內容轉為數字 如將: 1, 2 3, 4 轉到兩個int變量中 for line in fileName:x, y = map(int, line.split(',')) '''# 取第一個數 a = linecache.getline(fileName, 1) a = a.split() for i in a:mate_n = int(i) print(mate_n)# 取第二個數 b = linecache.getline(fileName, 2) b = b.split() c = [] for i in b:c.append(int(i)) mate_num = c print(mate_num)# 生成矩陣 matrix = np.zeros((mate_n+1, mate_n+1),dtype = np.uint) print(matrix)# 首行、首列賦值 for i in range(mate_n):matrix[0][i+1] = mate_num[i]matrix[i+1][0] = mate_num[i] print(matrix)# 求第一斜對角線 for i in range(2, mate_n+1):matrix[i][i-1] = matrix[i][0] ^ matrix[0][i-1] print(matrix)# 填充下三角 for j in range(3, mate_n+1):for i in range(j, mate_n+1):matrix[i][i-j+1] = matrix[i-1][i-j+1] ^ matrix[i][i-j+2] print(matrix)# # # 填充下三角--迭代 # for i in range(mate_n-2, mate_n+1): # 4 5 6 # for j in range(1, i-3): # 1 2 3 # if (i - j) % 2 != 0: # matrix[i][j] = matrix[i-2][j]^matrix[i][j+2] # print(matrix)# 首行重新賦值 for i in range(mate_n): # 0 1 2 3 4 5matrix[0][i+1] = i+1matrix[i+1][0] = i+1 print(matrix)# 讀取文件第4行 mate_q = linecache.getline(fileName, 3) mate_q = mate_q.split() for i in mate_q:mate_q = int(i) mate_q# 遍歷第4-q行,輸出 file = open(fileName, 'r') file.readline() file.readline() file.readline() for i in range(4, 4 + int(mate_q)): # 每行循環line = file.readline()line = line.split()c = []for j in line:if j.isdigit():c.append(int(j))a, b = c[0], c[1]smatrix = matrix[a:b+1,a:b+1]indexSmatrix = mate_num[a-1:b]matrix_utli = np.r_[smatrix, [indexSmatrix]]# txt = "這是第", i, "行", c, smatrix.max()txt = str(matrix_utli.max())file1.write(txt)file1.write('\n')file1.close() 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的二进制异或--7.18待完善的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。