题意:较大的容量减较小的容量,较小的容量翻倍。问操作几回其中一个空。

开始用set判重,重复就不可行。不过状态最多有2e18种。不仅爆内存,还超时。然后找规律。发现只有比例为1:1,1:3,1:7,3:5,1:15,3:13,5:11,7:9......这样才行。也就是化简以后相加是2^k。

#pragma comment(linker,"/STACK:1024000000,1024000000")
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <list>
#define mkp make_pair
using namespace std;
const double EPS=1e-8;
const int SZ=1e2+10,INF=0x7FFFFFFF;
const long long mod=19999997;
typedef long long lon;int gcd(int x,int y)
{if(x==0)return y;if(y==0)return x;if(x<y)swap(x,y);int res=0;for(;;){int rem=x%y;if(rem==0)return y;x=y;y=rem;}
}int cnt(int x)
{int res=0;for(;x;x-=x&-x,++res);return res;
}int chk(int x)
{int num=cnt(x);if(num!=1)return -1;else{for(int i=0;i<32;++i){if((1<<i)&x)return i;}}
}int main()
{std::ios::sync_with_stdio(0);//freopen("d:\\1.txt","r",stdin);int casenum;//cin>>casenum;//scanf("%d",&casenum);//for(int time=1;time<=casenum;++time)//for(int time=1;cin>>n;++time)
    {int n,m;cin>>n>>m;int d=gcd(n,m);//cout<<d<<endl;n/=d,m/=d; if(n==0||m==0)cout<<0<<endl;else{cout<<chk(n+m)<<endl;}}return 0;
}

超内存的:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <list>
using namespace std;
const double EPS=1e-8;
const int SZ=1e2+10,INF=0x7FFFFFFF;
const long long mod=19999997;
typedef long long lon;
int n,sum[9],arr[9];bool chk(int x,int t)
{int res=0;if(x/n&&arr[x]<arr[x-n])++res;if(x%n&&arr[x]<arr[x-1])++res;if(x/n!=n-1){if(t){if(arr[x]<arr[x+n])++res;}else ++res;}if(x%n!=n-1){if(t){if(arr[x]<arr[x+1])++res;}else ++res;}return t?res==sum[x]:res>=sum[x];
}bool dfs(int x)
{//cout<<x<<endl;if(x==n*n){
//        for(int i=0;i<n*n;++i)
//        {
//            cout<<arr[i]<<" ";
//        }cout<<endl;return 1;}for(int i=1;i<10;++i){arr[x]=i;if(x%n&&chk(x-1,0||((x-1)/n==n-1))==0)continue;if(x/n&&chk(x-n,1)==0)continue;if(x==n*n-1&&chk(x,1)==0)continue;//cout<<x<<" "<<i<<endl;if(dfs(x+1))return 1;//else cout<<x<<" "<<i<<" fail"<<endl;
    }arr[x]=0;return 0;
}int main()
{std::ios::sync_with_stdio(0);//freopen("d:\\1.txt","r",stdin);int casenum;//cin>>casenum;//scanf("%d",&casenum);//for(int time=1;time<=casenum;++time)//for(int time=1;cin>>n;++time)
    {cin>>n;for(int i=0;i<n*n;++i){cin>>sum[i];}if(n==1){if(sum[0]==0)cout<<1<<endl;else cout<<"NO SOLUTION"<<endl;}else if(dfs(0)){for(int i=0;i<n*n;++i){if(i%n)cout<<" ";cout<<arr[i];if(i%n==n-1)cout<<endl;}}else{cout<<"NO SOLUTION"<<endl;}}return 0;
}

超时的:

#pragma comment(linker,"/STACK:1024000000,1024000000")
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <list>
#define mkp make_pair
using namespace std;
const double EPS=1e-8;
const int SZ=1e2+10,INF=0x7FFFFFFF;
const long long mod=19999997;
typedef long long lon;int work(int x,int y,int x1,int y1,int s)
{if(x<y)swap(x,y);if(x1<y1)swap(x1,y1);//cout<<x<<" "<<y<<" "<<x1<<" "<<y1<<endl;if(s!=1&&x==x1&&y==y1)return -1;x-=y;y*=2;x1-=y1;y1*=2;if(x<y)swap(x,y);if(x1<y1)swap(x1,y1);//if(s!=1&&x==x1&&y==y1)return -1;x1-=y1;y1*=2;if(x==0||y==0)return s;return work(x,y,x1,y1,s+1);
}int main()
{std::ios::sync_with_stdio(0);//freopen("d:\\1.txt","r",stdin);int casenum;//cin>>casenum;//scanf("%d",&casenum);//for(int time=1;time<=casenum;++time)//for(int time=1;cin>>n;++time)
    {int n,m;cin>>n>>m;if(n==0||m==0)cout<<0<<endl;else if((n&1)^(m&1))cout<<-1<<endl;else cout<<work(n,m,n,m,1)<<endl;}return 0;
}

转载于:https://www.cnblogs.com/gaudar/p/9764809.html

sgu 126 Boxes相关推荐

  1. 史上最全的SGU题目分类

    由于SGU上神题遍地,特列此表,便于训练时分类训练. 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traffic Lights 最短路 104 Little Shop ...

  2. 多目标跟踪MOT踩坑记录

    文章目录 tracking MOT log 0. 数据集 1.Github 2.资源综述 3.工具包Code MOT 工具包 MOT 评估 Python版 4.算法Code deep sort `py ...

  3. CF1030F Putting Boxes Together

    CF1030F - Putting Boxes Together 题意:给定数轴上的n个物体,你要把第l个物体到第r个物体之间的所有物体挪到挨在一起,使得总消耗最小.带修.消耗是重量乘距离. 解:就是 ...

  4. SGU 187 - Twist and whirl -- want to cheat

    原题地址:http://acm.sgu.ru/problem.php?contest=0&problem=187 太开心啦!!!!这道题从2013年开始困扰我!!今天晚上第四次下定决心把它写一 ...

  5. SGU 286 Ancient decoration(Euler路径+二分匹配)

    http://acm.sgu.ru/problem.php?contest=0&problem=286 先找欧拉回路,再做二分匹配,输出匹配 有一道题和这个很像:HDU 3551 Hard P ...

  6. SGU126 Boxes

    SGU126 Boxes 题目大意 给出(A,B)(A,B)两个数(要求A≤BA \le B,不满足则交换) 每次操作可将其变为(A×2,B−A)(A \times 2, B - A) 问经过多少次操 ...

  7. Anchor Boxes示例实战

    Anchor Boxes示例实战 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的真实边界框.不同的模型可能使用不同的区域 ...

  8. 深度学习Anchor Boxes原理与实战技术

    深度学习Anchor Boxes原理与实战技术 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的地面真实边界框.不同的模型 ...

  9. 本地 无法启动 SQL Server 错误代码126

    Windows 不能在 本地计算机 启动 SQL Server .错误代码126. 2008 R2  配置工具 VIA设置禁用. 然后重启一下服务 转载于:https://www.cnblogs.co ...

最新文章

  1. 【学习笔记】Silverlight框架:Jounce(4)——事件通信
  2. 高效精细化管理企业工单
  3. 解决 MariaDB无密码就可以登录的问题
  4. 【转】ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证)...
  5. linux安装mysql5.7.25教程,Linux安装mysql-5.7.25
  6. Mac安装brew包管理工具
  7. python打印菱形星号代码_Python打印“菱形”星号代码
  8. Python3 B格注释
  9. 电压压力蕊片_一文让你知道什么是压力变送器
  10. 过山车99java游戏_过山车乐园游戏下载
  11. gulp-sass的有关问题
  12. map转成url拼接请求参数
  13. c++ 判断数学表达式有效性_2009年高考数学上海卷难度如何?独特的题型设计,让你耳目一新...
  14. X.509,RSA,PKCS 普及
  15. vue 回到顶部简单动画效果
  16. Excel自学详细视频教程百度网盘分享
  17. AP注册不上线(现网中存在其它厂商的控制器)
  18. ”教你如何抓住短视频时代风口,进行流量红利变现
  19. 手把手教你写一个微信小程序(前端+Java后端)
  20. Office2013图标出现白板的解决办法

热门文章

  1. JAVA中构造器和方法的区别点
  2. linux安装mysql5.7.19
  3. 计算机专业的一个四年工作的总结
  4. 手把手教你从零构建属于自己的小linux
  5. android eclipse中导入framework.jar以及使用其隐藏类的方法
  6. android eclipse的环境配置
  7. 【Android】init.rc
  8. CSS3 -webkit-transition(属性渐变)
  9. Oracle查询日期
  10. vue-cookies的使用