BZOJ2797: [Poi2012]Squarks
来源:互联网 发布:做淘宝客服需要交钱吗 编辑:程序博客网 时间:2024/05/16 19:18
BZOJ2797
将
发现如果确定了
剩下的最小的就为
那么我们就只需要枚举
然后需要用一个支持插入,删除,储存重复值,查询最小值的东西维护。
QAQ好菜啊
【代码】
#include <cstdio>#include <iostream>#include <algorithm>#include <set>#define N 10005using 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;}
阅读全文
0 0
- BZOJ2797: [Poi2012]Squarks
- BZOJ2797: [Poi2012]Squarks
- BZOJ2797: [Poi2012]Squarks
- BZOJ 2797 Poi2012 Squarks
- 2797: [Poi2012]Squarks
- BZOJ2798/POI2012 Squarks
- BZOJ 2797 [Poi2012]Squarks 数学
- bzoj 2797 [Poi2012]Squarks set 数学
- bzoj-2797 Squarks
- POI2012题解
- [Poi2012]Festival
- BZOJ 2789: [Poi2012]Letters
- BZOJ2793 [Poi2012]Vouchers 调和级数
- [BZOJ 2790]POI2012 Distance
- [BZOJ 2789]POI2012 Letters
- [BZOJ 2791]POI2012 Rendezvous
- [BZOJ 2803]Poi2012 Prefixuffix
- 【POI2012】【BZOJ2796】Fibonacci Representation
- In Danger(二分+打表+找规律(约瑟夫环))
- 441. Arranging Coins
- rpm包管理详解(1)
- 三角网格(Triangle Mesh)
- Faster R-CNN 的Caffe实现
- BZOJ2797: [Poi2012]Squarks
- 软件开发需求分析规范
- spring的jsr 303小例子
- 输出菱形
- Intervals 【区间差分约束】基础
- hdu1317—XYZZY(floyed+Bellman-Ford)
- iOS 如何录制mixer unit 的输出
- rpm包管理详解(2)
- 1168: 复数加法