社区讨论
B 怎么挂了
P15650[省选联考 2026] 摩卡串 / string参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mmg8yd7r
- 此快照首次捕获于
- 2026/03/07 19:35 3 天前
- 此快照最后确认于
- 2026/03/07 21:45 3 天前
qoj 上 25 分,属于是挂了 5 分,但如果代码真有问题能挂 5 分那么也能挂 15 分。
不知道是赛后复原出问题还是就是思路伪了,不要挂分啊。
CPP#include<iostream>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<numeric>
#include<vector>
#include<set>
#include<queue>
using namespace std;
int c,T,n,k;
string s,t,ans;
void bfs() {
queue<string> q;
q.push("0");
q.push("1");
while(q.size()) {
string t=q.front();
for(int i=0;i+s.length()-1<t.length();i++)
if(t.substr(i,s.length())==s) {
int cnt=0;
for(int l=0;l<t.length();l++)
for(int r=l;r<t.length();r++) {
if(t.substr(l,r-l+1)<s)
cnt++;
}
if(cnt==k) {
ans=t;
return;
}
break;
}
if(t.length()<15) {
q.push(t+'0');
q.push(t+'1');
}
q.pop();
}
ans="Impossible";
}
int main() {
// freopen("string.in","r",stdin);
// freopen("string.out","w+",stdout);
ios::sync_with_stdio(0);
cout.tie(0);
cin>>c>>T;
while(T--) {
cin>>n>>k>>s;
if(c<=3)
bfs();
else {
if(n==1 or n*(n+1)>>1>k+1)
ans="Impossible";
else {
k-=((n*(n+1)>>1)-1);
for(int i=0;i*(n-1)<=k;i++) {
int remain=k;
t=s;
for(int j=1;j<=i;j++)
t+='0';
remain-=(i*(n-1));
for(int j=n-1;j>=1 && remain>0;--j)
while(remain>=j*(j+1)>>1) {
t+='1';
for(int g=1;g<=j;g++)
t+='0';
remain-=(j*(j+1)>>1);
}
if(i) {
if(t.length()<ans.length())
ans=t;
}
else
ans=t;
}
}
}
cout<<ans<<'\n';
}
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...