201903-3損壞的raid5
吐槽一下
題目給的2個用例都過了,但還是只有10分,但個人原因只是為了練習熟練度,所以也不太在意分數。。。如果有哪位同學知道為啥是10分,萬望告知
演算法設計+題目分析
1、 用乙個矩陣讀入所有的塊資料;
string p[maxv]
;
2、再按照塊大小(8個字元)分割這些資料,儲存在vector裡
vector p_s[maxv]
;
3、根據塊的數量是否大於2決定接下來的操作,如果是2就直接找尋資料,如果大於2,轉入操作4;
4、這時候需要求的待查詢塊的條帶編碼、磁碟號、磁碟內的順序號:
條帶號=塊號/條帶內的塊數量;
磁碟號=條帶號%磁碟數量;
磁碟內的條帶順序號=int(條帶號/(磁碟數量-1));
磁碟內的塊順序號=磁碟內的條帶順序號*條帶內的塊數量+(條帶號+1)%條帶內的塊號;
5、如果所查的塊號沒丟失,直接列印;
6、如果所查的塊號丟失了,就將其餘n-1塊的資料做異或(此處涉及16進製制轉化成2進製,和2進製轉化成16進製制),然後列印;
7、如果給予的塊數量小於n-1或有其他非法情況,列印-
幾個核心點
1、幾個編號的取得,此處很神奇;
2、進製的轉化(我的方法有一點暴力)
無環境
visual c++6.0
#include
#include
#include
#include
using
namespace std;
const
int maxv=
1010
;string p[maxv]
;//儲存的塊資料
vector p_s[maxv]
;//按照8字元劃分好的塊資料
void
create_p_s
(string s,
int a)
}string trans_2_16
(vector<
int> r)
//cout}vector<
int>
yh(vector<
int> c, vector<
int> r)
return r;
}vector<
int>
trans_16_2
(string s)
if(h==14)
if(h==13)
if(h==12)
if(h==11)
if(h==10)
}if(s[i]
>=
'0'&& s[i]
<=
'9')
if(h==8)
if(h==7)
if(h==6)
if(h==5)
if(h==4)
if(h==3)
if(h==2)
if(h==1)
if(h==0)
}}return c;
}void
c_print
(int n,
int s,
int l,
int a,
int one_num)
vector<
int> c;
for(
int i=
0; istring result=
trans_2_16
(r);
cout<}else cout<<
"-"
c_print_1
(int n,
int s,
int l,
int a,
int one_num)
for(
int i=
0; istring result=
trans_2_16
(r);
cout<}else cout<<
"-";}}
intmain()
cin>>m;
if(n==2)
}else
}int kk;
for(
int ii=
0; ii1; ii++
) cin>>kk;
if(kksize()
) cout<;else cout<<
"-";
return0;
}int a;
for(
int ii=
0; ii1; ii++
) cin>>a;
c_print_1
(n, s, l, a, one_num)
;return0;
}
無 CCF損壞的RAID硬碟
1 使用太多次cin讀入,會嚴重降低讀入速度,需要加上這一句話。ios sync with stdio false 一定要有這句話才能提高速度 2 這裡需要注意的是 如果在程式中加入了上面那一句 不能出現scanf和cin,printf和cout混用的情況。因為上面那一句 實際上是解除了scanf和...
CCF認證 送貨
問題描述 為了增加公司收入,f公司新開設了物流業務。由於f公司在業界的良好口碑,物流業務一開通即受到了消費者的歡迎,物流業務馬上遍及了城市的每條街道。然而,f公司現在只安排了小明乙個人負責所有街道的服務。任務雖然繁重,但是小明有足夠的信心,他拿到了城市的地圖,準備研究最好的方案。城市中有n個交叉路口...
ccf認證最大的矩形
問題描述 在橫軸上放了n個相鄰的矩形,每個矩形的寬度是1,而第i 1 i n 個矩形的高度是hi。這n個矩形構成了乙個直方圖。例如,下圖中六個矩形的高度就分別是3,1,6,5,2,3。請找出能放在給定直方圖裡面積最大的矩形,它的邊要與座標軸平行。對於上面給出的例子,最大矩形如下圖所示的陰影部分,面積...