BZOJ2797: [Poi2012]Squarks
2017-05-24 19:49
253 查看
BZOJ2797
将a数组排序。
a1=x1+x2,a2=x1+x3
x2+x3可能为a1……an
发现如果确定了x1,x2,x3,在数组a中删去x1+x2,x1+x3,x2+x3
剩下的最小的就为x1+x4,那么x4就确定了,以此类推,后面的就都可求了。
那么我们就只需要枚举x2+x3的值(在a数组中的位置)即可。
然后需要用一个支持插入,删除,储存重复值,查询最小值的东西维护。
multiset完美解决。
QAQ好菜啊set都不会用。。multiset基础操作都搞了半天。。
将a数组排序。
a1=x1+x2,a2=x1+x3
x2+x3可能为a1……an
发现如果确定了x1,x2,x3,在数组a中删去x1+x2,x1+x3,x2+x3
剩下的最小的就为x1+x4,那么x4就确定了,以此类推,后面的就都可求了。
那么我们就只需要枚举x2+x3的值(在a数组中的位置)即可。
然后需要用一个支持插入,删除,储存重复值,查询最小值的东西维护。
multiset完美解决。
QAQ好菜啊set都不会用。。multiset基础操作都搞了半天。。
【代码】
#include <cstdio> #include <iostream> #include <algorithm> #include <set> #define N 10005 using namespace std; typedef long long ll; int read() { int x=0,f=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();} while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return x*f; } int n,m,sum; int a[45005],tmp[305],ans[305][305]; multiset<int>M; void Solve(int x) { M.clear(); for(int i=3;i<=m;i++) M.insert(a[i]); tmp[1]=a[1]+a[2]-x>>1; tmp[2]=a[1]-tmp[1]; tmp[3]=a[2]-tmp[1]; if(tmp[1]<0||tmp[2]<0||tmp[3]<0) return; M.erase(M.find(x)); for(int i=4;i<=n;i++) { tmp[i]=*M.begin()-tmp[1]; if(tmp[i]<0) return; for(int j=1;j<i;j++) { if(M.find(tmp[j]+tmp[i])==M.end()) return; M.erase(M.find(tmp[j]+tmp[i])); } } for(int i=2;i<=n;i++) if(tmp[i]<=tmp[i-1]) return; sum++; for(int i=1;i<=n;i++) ans[sum][i]=tmp[i]; } int main() { n=read();m=(n-1)*n/2; for(int i=1;i<=m;i++) a[i]=read(); sort(a+1,a+1+m); for(int i=3;i<=n;i++) if(i==3||a[i]!=a[i-1]) Solve(a[i]); printf("%d\n",sum); for(int i=1;i<=sum;i++,printf("\n")) for(int j=1;j<=n;j++) printf("%d ",ans[i][j]); return 0; }
相关文章推荐
- BZOJ2797: [Poi2012]Squarks
- BZOJ2797: [Poi2012]Squarks
- bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有
- BZOJ 2797 Poi2012 Squarks
- bzoj 2797 [Poi2012]Squarks set 数学
- 2797: [Poi2012]Squarks
- [BZOJ2797][Poi2012]Squarks
- BZOJ 2797 [Poi2012]Squarks 数学
- [POI2012]Squarks
- 【BZOJ2797】[Poi2012]Squarks 暴力乱搞
- 2796: [Poi2012]Fibonacci Representation 思路题 map+记忆化搜索
- BZOJ2802: [Poi2012]Warehouse Store
- 【BZOJ】【P2793】【Poi2012】【Vouchers】【题解】【乱搞】
- 树状数组求逆序对-洛谷P3531 [POI2012]LIT-Letters
- [BZOJ 2802]Poi2012 Warehouse Store
- BZOJ_2795_[Poi2012]A Horrible Poem_hash+暴力
- BZOJ 2791 Poi2012 Rendezvous 倍增LCA
- BZOJ2789: [Poi2012]Letters
- [POI2012]Tour de Bajtocja
- BZOJ2790: [Poi2012]Distance