不要想当然。

考虑到我们一定有存在个数为\(4\)的倍数的数。

否则第一个不是的数即为\(x\)。

那么我们设\(b\)为所有的数的最大值。

那么显然有\(|n - x| + |m - y| = b\)

那么有\(y = n + m - x - b\)

所以我们只要暴力枚举\(t\)的约数,然后暴力判断。

#include<iostream>
#include<cstdio>
#define ll long long
#define N 1000010 ll cnt[N << 1],ct[N << 1]; ll a,b,x,y;
ll t; ll abs(ll x){return x > 0 ? x : -x;} int main(){
scanf("%lld",&t);
for(int i = 1;i <= t;++i){
ll x;
scanf("%lld",&x);
cnt[x] ++ ;
b = std::max(x,b);
}
for(int i = 1;i <= t;++i){
if(cnt[i] < i * 4){
x = i;
break;
}
}
for(int i = 1;i <= t;++i){
if(t % i == 0){
int n,m;
n = i,m = t / i;
y = n + m - x - b;
if(abs(n - x) + abs(m - y) == b){
for(int i = 1;i <= t;++i)
ct[i] = 0;
for(int j = 1;j <= n;++j)
for(int k = 1;k <= m;++k)
ct[abs(j - x) + abs(k - y)] ++ ;
bool k = 1;
for(int i = 1;i <= t;++i)
if(cnt[i] != ct[i])
{
k = 0;
break;
}
if(k){
std::cout<<n<<" "<<m<<std::endl<<x<<" "<<y<<std::endl;
return 0;
}
}
}
}
puts("-1");
return 0;
}

最新文章

  1. 架构设计:负载均衡层设计方案(3)——Nginx进阶
  2. Python字符串str的方法使用
  3. Android分步注册,Activity由B返回A修改再前往B,B中已填项不变
  4. IBatis.net动态SQL语句
  5. 【BZOJ】3339: Rmq Problem &amp; 3585: mex(线段树+特殊的技巧)
  6. Linux shell 脚本攻略之根据扩展名切分文件名
  7. python初探-collections容器数据类型
  8. mybatis配置Log4j带不出日志
  9. Java安装
  10. 实验楼-4-Linux文件权限
  11. 最短路径之Dijkstra算法
  12. 微信小程序 开发文档
  13. Spring MVC 拦截器 (十)
  14. 在网站中使用UEditor富文本编辑器
  15. Can you answer these queries?---hdu4027
  16. springmvc最优化
  17. ORA-28001:口令已经失效
  18. 编写每天定时切割Nginx日志的脚本
  19. MFC显示bmp图像
  20. Ubuntu 12.04下安装QQ 2012 Beta3

热门文章

  1. Endian
  2. C++ 与 Visual Studio 2019 和 WSL(四)——库组件
  3. 新手小白在github上部署一个项目
  4. 【二食堂】Beta - 发布声明
  5. 【二食堂】Alpha - Scrum Meeting 1
  6. OO电梯作业总结
  7. 21.7.31 test
  8. 编译内核错误:Can&#39;t use &#39;defined(@array)&#39; (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373
  9. heihei
  10. .net core 和 WPF 开发升讯威在线客服系统:把 .Net Framework 打包进安装程序