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;
}