损坏的RAID5

string讀入卡cin

関同步 ios::sync_with_stdio(false)

由塊號映射到具體位置

塊號id對應第col個字符串

字符串開始的位置st

 #include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int n,s,l;
bool vis[];
string t[];
int calraw(int id)
{
return id/(s*(n-));
}
int calcol(int id)
{
int st = (n-calraw(id)%n)%n;
id -= (id/((n-)*s))*(n-)*s;
int ans = (st + id/s)%n;
// cout<<st<<" stid "<<id<<endl;
return ans;
}
int st(int id)
{
int r=calraw(id);
int ans=r**s+*(id%s);
return ans;
}
int ati(char c)
{
if(c>='A'&&c<='Z')
return c-'A'+;
else return c-'';
}
char ita(int x)
{
if(x>=)
return char(x-+'A');
else return char(''+x);
}
string Xor(string s,string t)
{
string ans="";
for(int i=;i<;i++){
int a = ati(s[i]);
int b = ati(t[i]);
ans.append(,ita(a^b));
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>s>>l;
int id;
for(int i=;i<l;i++){
cin>>id;
cin>>t[id];
vis[id]=;
}
int len=t[id].length();
int m;
cin>>m; for(int i=;i<m;i++){
cin>>id;
int x=calcol(id);
if(vis[x]){
int y =st(id);
if(y>=len){
cout<<"-\n";
continue;
}
for(int i=y;i<y+;i++){
cout<<t[x][i];
}
cout<<'\n';
}else if(!vis[x]&&l==n-){
int y =st(id);
string S="",T;
if(y>=len){
//puts("-");
cout<<"-\n";
continue;
} for(int i=;i<n;i++){
if(vis[i]){
if(S==""){
S=t[i].substr(y,);
}else{
T=t[i].substr(y,);
S=Xor(S,T);
}
}
}
cout<<S<<'\n';
}
else{
cout<<"-\n";
}
} }
/**
3 2 2
0 000102030405060710111213141516172021222324252627
1 A0A1A2A3A4A5A6A7B0B1B2B3B4B5B6B7C0C1C2C3C4C5C6C7
2 1 2
0 000102030405060710111213141516172021222324252627
1 000102030405060710111213141516172021222324252627
*/

90分代碼:

由其餘已知的n-1個字符串預處理推出其餘一個字符串

查詢O(1)

預處理TLE了

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include<cstring>
#include<cstdlib>
using namespace std; int n, s, l;
bool vis[];
string t[];
int calraw(int id)
{
return id / (s * (n - ));
}
int calcol(int id)
{
int st = (n - calraw(id) % n) % n;
id -= (id / ((n - ) * s)) * (n - ) * s;
int ans = (st + id / s) % n;
return ans;
}
int st(int id)
{
int r = calraw(id);
int ans = r * * s + * (id % s);
return ans;
}
int ati(char c)
{
if (c >= 'A' && c <= 'Z')
return c - 'A' + ;
else
return c - '';
}
char ita(int x)
{
if (x >= )
return char(x - + 'A');
else
return char('' + x);
} bool tmp[];
int main()
{
ios::sync_with_stdio(false);
cin>>n>>s>>l;
int id;
for (int i = ; i < l; i++)
{
cin >> id;
cin >> t[id];
vis[id] = ;
}
int len = t[id].length();
if (l == n - )
{
string ss="";
int res=; for (int j = ; j < len; j++)
{
memset(tmp,,sizeof tmp);
for (int i = ; i < n; i++)
{
if(vis[i]&&t[i][j]>='A'&&t[i][j]<='Z'){
tmp[t[i][j]-'A'+]+=;
tmp[t[i][j]-'A'+]%=;
}else if(vis[i]){
tmp[t[i][j]-'']+=;
tmp[t[i][j]-'']%=;
}else if(!vis[i]){
res=i;
}
}
int cnt=;
for(int k=;k<;k++){
if(tmp[k])cnt^=k;
}
ss.append(,ita(cnt)); }
vis[res]=;
t[res]=ss; }
int m;
cin >> m; for (int i = ; i < m; i++)
{
cin>>id;
if(id>=(n-)*s*(len/(*s))){
cout<<"-\n";
continue;
}
int x = calcol(id);
//cout<<x<<endl;
if (vis[x])
{
int y = st(id);
// cout<<y<<endl;
if (y >= t[x].length())
{
cout<<"-\n";
continue;
}
for (int i = y; i < y + ; i++)
{
cout<<t[x][i];
}
cout<<"\n";
}
else
{
cout<<"-\n";
}
}
}
/**
3 2 2
0 000102030405060710111213141516172021222324252627
1 A0A1A2A3A4A5A6A7B0B1B2B3B4B5B6B7C0C1C2C3C4C5C6C7
2 1 2
0 000102030405060710111213141516172021222324252627
1 000102030405060710111213141516172021222324252627
*/

损坏的RAID5的更多相关文章

  1. csp 201903-3 损坏的RAID5

    问题描述 试题编号: 201903-3 试题名称: 损坏的RAID5 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 答题栏     核

  2. ccf 201903-3 损坏的RAID5

    9月份考ccf,暑假打算做一些往年的真题... 这个题,一开始真是把我给看晕了 传说中的大模拟,果然不简单QAQ 首先读懂题目就是一个大难点,特别是对于我这种题目一长就看不进去的人来说 读懂题目之后, ...

  3. CCF-CSP题解 201903-3 损坏的RAID5

    先吐槽先吐槽!因为输入太大,需要用fgets,读n个字符或读到回车终止. char *fgets(char *str, int n, FILE *stream) 因为scanf模拟考试T了10+次.因 ...

  4. 试题编号: 201903-3 试题名称: 损坏的RAID5

    这题的数据未免也太水了,题目的意思好像默认是每块磁盘装载数据的长度是相等的.我写了判断每次取数据是否会超过每块磁盘存的数据的长度,然而并没有什么卵用.交上去20分,写了个数据测了下,如果要求的块太大的 ...

  5. 服务器较稳妥的磁盘阵列方案:RAID5+热备盘

    最近公司这边要整个数据中心,但是我们这边磁盘阵列的方案选择方面需要做好万全的测试 内部测试的服务器当初损坏的磁盘1个做的raid5直接换个新磁盘做替换rebuild就行了 但是现在想的方法是5+1的方 ...

  6. Linux学习之CentOS(二十八)--RAID原理基础及Linux下软件RAID配置

    一.RAID的原理基础 在 讲解RAID的原理基础之前,我们首先来了解一下传统磁盘的劣势.我们知道一台PC机种都会包含CPU.内存.主板.硬盘.网卡等硬件,影响计算机性能的 组建包括:CPU.主板总线 ...

  7. Linux -RAID

    转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/25/3099464.html 硬盘类型 速度 SATA <150M/s S ...

  8. RAID磁盘阵列是什么(一看就懂)

    在单机时代,采用单块磁盘进行数据存储和读写的方式,由于寻址和读写的时间消耗,导致I/O性能非常低,且存储容量还会受到限制.另外,单块磁盘极其容易出现物理故障,经常导致数据的丢失.因此大家就在想,有没有 ...

  9. 服务器RAID设置以及简单理解

    备注: 适用于测试环境,生产环境暂时未验证 1. RAID种类 最高性能的RAID0 完全拆分所有的IO 不进行校验 但是单盘损坏, 数据完全丢失 最高损耗的RAID1 损失一半的存储容量, 做镜像, ...

随机推荐

  1. eclipse中svn的使用

    1.在eclipse中添加SVN插件或者说直接利用eclipse软件中的help-install项进行网站在线下载也可 2.安装好SVN之后, 2.1.从SVN检出项目到本地 右击鼠标-选import ...

  2. WordPress 在Ubuntu下安装插件、主题输入FTP后无法创建目录

    最近自己在搞基于lnmp+wordpress的个人博客, 一切都就绪后,想改变下自己的主题,然后去Wordpress里面内置的主题安装下载的时候,提示:无法创建目录! 一般我们在Ubuntu系统上面安 ...

  3. QT use of undeclared identifier 'cout'

    在QT 5.12中直接使用cout将提示错误如下: 添加库 #include<iostream>,并将cout&end改为std::cout&std::endl 代码如下: ...

  4. numpy中的快速的元素级数组函数

    numpy中的快速的元素级数组函数 一元(unary)ufunc 对于数组中的每一个元素,都将元素代入函数,将得到的结果放回到原来的位置 >>> import numpy as np ...

  5. Python 入门之 内置模块 -- os模块

    Python 入门之 内置模块 -- os模块 1.os os是和操作系统做交互,给操作发指令 os模块是与操作系统交互的一个接口,它提供的功能多与工作目录,路径,文件等相关 (1)工作路径 prin ...

  6. python计算1~100的和,1~100奇数的和,1~100偶数的和,一条代码求1~100的和

    1.计算1~100的数之和----for循环实现1~100的和 sum1 = ,): sum1 = sum1 + i i += print(f"1-100之间的和是:{sum1}" ...

  7. python3的一些文件操作的脚手架

    用python把原来的脚本重构了一下,其中写了文件操作的一些函数,如下: import os import shutil import hashlib import stat #查找文件夹中的某个文件 ...

  8. volatile关键字?MESI协议?指令重排?内存屏障?这都是啥玩意

    一.摘要 三级缓存,MESI缓存一致性协议,指令重排,内存屏障,JMM,volatile.单拿一个出来,想必大家对这些概念应该有一定了解.但是这些东西有什么必然的联系,或者他们之间究竟有什么前世今生想 ...

  9. 23、selenium爬取歌曲精彩评论

    我们这次试试用selenium爬取QQ音乐的歌曲评论,我选的歌是<甜甜的>.   https://y.qq.com/n/yqq/song/000xdZuV2LcQ19.html     f ...

  10. linux命令详解——ln

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当我们需要在不同的目录,用到相同的 ...