然后 一个数字n,以及2n-1长度的字符串
我们按照分段规则 会发现分段的数量一定是是n ->[2n-(n-1)]
怎么来的呢 :我们看最后一段 一定是 一个头数字+(n-1)个尾数字
呢么头数字的 数量就是 我们分段的 数量也就是 2n-1-(n-1)=n
呢么,问题变成了 找到一个n长度的字符串与n段字符相似
这样按照规则只要保证 答案所求字符串某一位数字 与 某一段相对位置数字相同就行
(第一位数字 == 第一段的第一位数字)
(第 2 位数字 == 第 2 段的第 2 位数字)
. . . . .
而对于所给字符串来说所求字符串的每一位的相对位置
是 1 3 5 7 9 自己举个例子
原因的话 是因为(你每段段首往后移动一位,而你所求相对位置也是往后移动一位,所以 移动间距固定为 2)
#include
using namespace std;
#define ll long long
#define mem(a,b) memset((a),(b),sizeof(a));
const ll inf=0x3f3f3f3f;//1061109567,2*未超int,allinf=mem(a,0x3f,sizeof(a));
const int N=2e5+10;
int a[1026],flag[1026],book[1026];
int main(){
// #define io
#ifdef io
freopen("in.txt","r",stdin);
#endif
int t;
cin>>t;
while(t--){
int n;
cin>>n;
string s;
cin>>s;
for(int i=0;i<2*n;i++){
if(i%2==0){
cout<<s[i];
}
}
cout<<endl;
}
return 0;
}
暴力枚举 ,,, 自己容纳最多武器并且这个武器所占空间是2种武器中较小的一个
枚举从 0-自己容纳上述最多数量
为啥要是 2种最小的呢个 反正是从0开始对吧 这个主要影响的助手
如果助手先从大的容量武器选的呢么 可能就会出现 明明可以选择更多的 小的容量的武器
具体看AC代码
错误代码,核心区域示例:(也就是替换AC代码,这个是先偷的大件的武器)
k=min(neww,ff/w);
temp+=k,ff-=k*w;
k=min(ff/s,news);
temp+=k;
#include
using namespace std;
#define ll long long
#define mem(a,b) memset((a),(b),sizeof(a));
const ll inf=0x3f3f3f3f;//1061109567,2*未超int,allinf=mem(a,0x3f,sizeof(a));
const int N=2e5+10;
int a[1026],flag[1026],book[1026];
int main(){
// #define io
#ifdef io
freopen("in.txt","r",stdin);
#endif
int t;
cin>>t;
while (t--) {
int p,f;
int as,aw,s,w;
cin>>p>>f>>as>>aw>>s>>w;
if(s>w) swap(s,w),swap(as,aw);//将大小区分出来 s为 占空间小的
int ma=p/s,ans=0;
ma=min(ma,as);
for(int i=0;i<=ma;i++){
//枚举
int news=as-i;
int neww=aw;
int temp=i;
int pp=p-s*i;
int ff=f;
int k=min(neww,pp/w);
temp+=k,neww-=k;
k=min(ff/s,news);//必须S在前
temp+=k,ff-=k*s;
k=min(neww,ff/w);// W在后
temp+=k;
ans=max(ans,temp);
}
cout<<ans<<endl;
}
return 0;
}
因为只有 都是0的情况下才会出现加密码中出现0所以 通过这一条件就可以还原出
原本的字符信息 。。。然后在进行一遍校验。
具体看AC代码
#include
using namespace std;
#define ll long long
#define mem(a,b) memset((a),(b),sizeof(a));
const ll inf=0x3f3f3f3f;//1061109567,2*未超int,allinf=mem(a,0x3f,sizeof(a));
const int N=2e5+10;
int a[1026],flag[1026],book[1026];
int main(){
// #define io
#ifdef io
freopen("in.txt","r",stdin);
#endif
int t;
cin>>t;
while(t--){
int n;
string s,ss;
cin>>s>>n;
ss.resize(s.size());
int len=s.length();
for(int i=0;i<len;i++){
ss[i]='1';
}
for(int i=0;i<len;i++){
//根据0判断 源字符串中0的位置
if(s[i]=='0'){
if(i-n>=0) ss[i-n]='0';
if(i+n<len) ss[i+n]='0';
}
}
int f=1;
for(int i=0;i<len;i++){
//校验 是否正确
if(s[i]=='1'){
int ff=1;
if(i-n>=0&&ss[i-n]=='1') ff=0;
if(i+n<len&&ss[i+n]=='1') ff=0;
if(ff){
f=0;
break;
}
}
}
if(!f)cout<<"-1"<<endl;
else{
cout<<ss<<endl;
}
}
return 0;
}