L3-029 还原文件(天梯赛)
这个题纯属把我逗乐了
首先分析暴力比较肯定不行,那咋办
这个问题的难点就在于每次比较有多个数,很难搞
于是我们就把多个数压缩成一个值就好了
这个题为啥把我逗乐了 因为我想的是把每个碎片的数平方再加到一起 压缩成一个值
好巧不巧的是 刚好样例就可以hack掉这个压缩 看来出题人是想过这个问题的
那我就每个数加一再平方不就好了
最后就是扫一遍dfs就好
点击查看代码
#include
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=1e5+5;
int n,m,cnt;
bool pp=false;
ll a[maxn],pre[maxn],val[maxn],ans[maxn];
mapmp;
setQ;
set:: iterator ii;
void dfs(int id){
if(pp)return ;
if(id>=n){
pp=true;
for(int i=1;i>n;
for(int i=1;i<=n;i++){
cin>>a[i];a[i]++;
pre[i]=pre[i-1]+a[i]*a[i];
}
cin>>m;
for(int t,i=1;i<=m;i++){
cin>>t;
for(int j=1,c;j<=t;j++){
cin>>c;c++;
val[i]+=c*c;
}
mp[val[i]]=i;
Q.insert(val[i]);
}
dfs(1);
return 0;
}