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

开始用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-;
const int SZ=1e2+,INF=0x7FFFFFFF;
const long long mod=;
typedef long long lon; int gcd(int x,int y)
{
if(x==)return y;
if(y==)return x;
if(x<y)swap(x,y);
int res=;
for(;;)
{
int rem=x%y;
if(rem==)return y;
x=y;
y=rem;
}
} int cnt(int x)
{
int res=;
for(;x;x-=x&-x,++res);
return res;
} int chk(int x)
{
int num=cnt(x);
if(num!=)return -;
else
{
for(int i=;i<;++i)
{
if((<<i)&x)return i;
}
}
} int main()
{
std::ios::sync_with_stdio();
//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==||m==)cout<<<<endl;
else
{
cout<<chk(n+m)<<endl;
}
}
return ;
}

超内存的:

#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-;
const int SZ=1e2+,INF=0x7FFFFFFF;
const long long mod=;
typedef long long lon;
int n,sum[],arr[]; bool chk(int x,int t)
{
int res=;
if(x/n&&arr[x]<arr[x-n])++res;
if(x%n&&arr[x]<arr[x-])++res;
if(x/n!=n-)
{
if(t)
{
if(arr[x]<arr[x+n])++res;
}
else ++res;
}
if(x%n!=n-)
{
if(t)
{
if(arr[x]<arr[x+])++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 ;
}
for(int i=;i<;++i)
{
arr[x]=i;
if(x%n&&chk(x-,||((x-)/n==n-))==)continue;
if(x/n&&chk(x-n,)==)continue;
if(x==n*n-&&chk(x,)==)continue;
//cout<<x<<" "<<i<<endl;
if(dfs(x+))return ;
//else cout<<x<<" "<<i<<" fail"<<endl;
}
arr[x]=;
return ;
} int main()
{
std::ios::sync_with_stdio();
//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=;i<n*n;++i)
{
cin>>sum[i];
}
if(n==)
{
if(sum[]==)cout<<<<endl;
else cout<<"NO SOLUTION"<<endl;
}
else if(dfs())
{
for(int i=;i<n*n;++i)
{
if(i%n)cout<<" ";
cout<<arr[i];
if(i%n==n-)cout<<endl;
}
}
else
{
cout<<"NO SOLUTION"<<endl;
}
}
return ;
}

超时的:

#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-;
const int SZ=1e2+,INF=0x7FFFFFFF;
const long long mod=;
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!=&&x==x1&&y==y1)return -;
x-=y;
y*=;
x1-=y1;
y1*=;
if(x<y)swap(x,y);
if(x1<y1)swap(x1,y1);
//if(s!=1&&x==x1&&y==y1)return -1;
x1-=y1;
y1*=;
if(x==||y==)return s;
return work(x,y,x1,y1,s+);
} int main()
{
std::ios::sync_with_stdio();
//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==||m==)cout<<<<endl;
else if((n&)^(m&))cout<<-<<endl;
else cout<<work(n,m,n,m,)<<endl;
}
return ;
}

sgu 126 Boxes的更多相关文章

  1. 找规律 SGU 126 Boxes

    题目地址:http://acm.sgu.ru/problem.php?contest=0&problem=126 /* 找规律,智商不够,看了题解 详细解释:http://blog.csdn. ...

  2. SGU 126 Boxes(模拟题|二进制)

    Translate:Sgu/126 126. 盒子 time limit per test: 0.5 sec. memory limit per test: 4096 KB 有两个盒子. 第一个盒子里 ...

  3. SGU 126. Boxes --- 模拟

    <传送门> 126. Boxes time limit per test: 0.25 sec. memory limit per test: 4096 KB There are two b ...

  4. Boxes - SGU 126(找规律)

    题目大意:有两个箱子,一个箱子装了A个球,一个箱子装了B个球,可以从球多的那个箱子拿出来球少的箱子里面球的总数放在少的那个箱子里面,问能否把球全部放在一个箱子里面? 分析:很容易求出来最后放的拿一下一 ...

  5. SGU 分类

    http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...

  6. 快速切题sgu126. Boxes

    126. Boxes time limit per test: 0.25 sec. memory limit per test: 4096 KB There are two boxes. There ...

  7. 今日SGU 5.4

    SGU 127 题意:给你n个数字,和m,k,问你有多少个数字的m次幂可以被k整除 收获:快速幂 #include<bits/stdc++.h> #define de(x) cout< ...

  8. SGU 495. Kids and Prizes

    水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...

  9. SGU Volume 1

    SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...

随机推荐

  1. 成本安全硬件(二):RFID on PN532 之WINDOWS 环境应用

    看了 低成本安全硬件(二):RFID on PN532之后,手上也有树莓派,于是下单买了个PN532 按文章方法,安装各类软件 ,折腾好好几天 还是不得行,LINUX 环境够乱啊 在网络 重新搜索,基 ...

  2. CTC(Connectionist Temporal Classification)介绍

    CTC解决什么问题 CTC,Connectionist Temporal Classification,用来解决输入序列和输出序列难以一一对应的问题. 举例来说,在语音识别中,我们希望音频中的音素和翻 ...

  3. 制作系统U盘,不用做任何动作直接从U盘启动装系统(非PE的)

    用U盘装系统可以用PE方式,进入PE系统,选择镜像文件,然后装,这种比较麻烦. 下面介绍一下从U盘启动,直接装系统的方法,这种方法从U盘启动后,不用做任何动作,就像用光盘装系统一样简单 首先要制作一下 ...

  4. 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验

    20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...

  5. Program Size

    在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息: Program Size: Code=6320  RO-data=4864  RW-data=44  ZI-d ...

  6. 某模拟题(USACO部分题+noip2005部分题)

    题目描述 农场上有N(1 <= N <= 50,000)堆草,放在不同的地点上.FJ有一辆拖拉机,也在农场上.拖拉机和草堆都表示为二维平面上的整数坐标,坐标值在1..1000的范围内.拖拉 ...

  7. 网络安全、Web安全、渗透测试之笔经面经总结(二)

    这篇文章涉及的知识点有如下几方面: 1.SSL Strip(SSp)攻击到底是什么? 2.中间人攻击——ARP欺骗的原理.实战及防御 3会话劫持原理 4.CC攻击 5.添加时间戳防止重放攻击 6.浅析 ...

  8. Python3基础 str *运算 重复拼接字符串

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. HDU 5992 Finding Hotels(KD树)题解

    题意:n家旅店,每个旅店都有坐标x,y,每晚价钱z,m个客人,坐标x,y,钱c,问你每个客人最近且能住进去(非花最少钱)的旅店,一样近的选排名靠前的. 思路:KD树模板题 代码: #include&l ...

  10. ubuntu 安转redis

    一 ,redis 安装配置 在 Ubuntu 系统安装 Redis 可以使用以下命令: sudo apt-get update sudo apt-get install redis-server 这样 ...