AIM Tech Round 3 (Div. 2) A B C D
虽然打的时候是深夜但是状态比较好 但还是犯了好多错误..加分场愣是打成了降分场
ABC都比较水 一会敲完去看D 很快的就想出了求0和1个数的办法 然后一直wa在第四组..快结束的时候B因为低级错误被hack了...做完B想出了D的正解企图绝杀..然而还是失败了..
想了想还是由于自己不够认真吧..手速做完前三题 看着能涨分的名次就不太努力的做D了..中间还水了一下群..浪费了很多时间 导致最后没有能够完成D
A n个数 大于b被抛弃 不然就加入容器 如果容器中的和大于d 清理容器 直接模拟就好
B n个x轴点和初始坐标a 问走完至少n-1个点需要多少时间 可以想到走n-1个点一定是最优的 那么排序之后分别尝试抛弃x[1]和x[n] 输出最小值 当n==1时 直接输出0 因为这个被hack..
C 给出一个字符串 在其中选择一个连续非空子串 使其中的所有字母都-1 求这样操作一下这个字符串能达到的最小字典序 可以想到从前往后每个点的重要程度是依次下降的 寻找到第一个不是a的位置 使其作为子串的起点 再向右寻找直到尾点是a 如果找不到起点 说明全是a 那就把最后一个变为z
D 给出 a00 a01 a10 a11 分别代表 在一个由0 1组成的字符串中 00 01 10 11对的个数 问是否存在这样的字符串 有就输出 否则输出im
可以由a00 和 a11求出0 1 的个数x y 需要注意的是a00为0的时候 x有两个可能值 0 1 所以x与y的组合情况有四种
当我们确定了x和y存在的时候 可以想出 x*y == a01 + a10 在四种情况中如果都不满足 就输出im
当有一个满足的时候 就是说 x个0和y个1一定可以组成满足题意的式子 这时候进行简单的特判 即一个为0的时候 直接输出另外一个
当都不为0的时候 可以将其摆为0..01..101..10..0的形式 先在1的尾部尝试放0 如果a10可以整除 就不用在1中间插0
当把尾部和可能存在的中间的部位插完之后 我们的策略一定是满足a10的 因为式子成立 所以剩下的0全部放在最前 一定是可以成立的
每次进行字符串的输出之后直接return 0 到最后再搞一个输出im出来
虽然比较长 .. 但是大部分都是复制粘贴的..
一个trick即test4 是0 0 0 0 这时候 可能的字符串是存在的 即0或者1 .. 利用上面提到的四种情况是可以得到的..但是自己居然认为这个是错点..写了特判输出im..真傻..
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<queue>
#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
using namespace std;
long long a10,a01,a11,a00;
int main()
{
cin>>a00>>a01>>a10>>a11;
if(a00==0&&a01==0&&a10==0&&a11==0)
{
printf("0\n");
return 0;
}
long long x; /// 0
long long y; /// 1
long long a000=a00*2;
long long a111=a11*2;
long long q= sqrt(a000);
bool ok = true;
bool fin = false;
if((q*(q+1))==a000)
{
x=q+1;
}
else ok=false;
if(ok)
{
long long w= sqrt(a111);
if((w*(w+1))==a111)
{
y=w+1;
}
else ok=false;
if(ok)
{
/// 1 -
if(a000==0)
x=1;
if(a111==0)
y=1; if((x*y)==(a01+a10))
{
if((x+y)>1000000)
{
printf("Impossible\n");
return 0;
}
if(x==0&&y==0)
{
printf("Impossible\n");
return 0;
}
else if(x==0)
{
for(int i=0; i<y; i++)
{
printf("1");
}
printf("\n");
return 0;
}
else if(y==0)
{
for(int i=0; i<x; i++)
{
printf("0");
}
printf("\n");
return 0;
}
/// x y
int aa01=a01;
int aa10=a10;
int cnt =0;
int ss=-1;
while(true)
{
y--;
if(aa01>x)
{
cnt ++;
aa01-=x;
}
else
{
ss=aa01;
aa01=0;
}
if(aa01==0)
break;
}
if(y>=0)
{
if(ss==-1)
{
for(int i=1; i<=y; i++)
printf("1");
for(int i=1; i<=x; i++)
printf("0");
for(int i=1; i<=cnt; i++)
printf("1");
printf("\n");
}
else
{
for(int i=1; i<=y; i++)
printf("1");
for(int i=1; i<=ss; i++)
printf("0");
printf("1");
for(int i=ss; i<x; i++)
printf("0");
for(int i=1; i<=cnt; i++)
printf("1");
printf("\n"); }
return 0;
}
}
/// 2
if(a000==0)
x=0;
if(a111==0)
y=1; if((x*y)==(a01+a10))
{
if((x+y)>1000000)
{
printf("Impossible\n");
return 0;
}
if(x==0&&y==0)
{
printf("Impossible\n");
return 0;
}
else if(x==0)
{
for(int i=0; i<y; i++)
{
printf("1");
}
printf("\n");
return 0;
}
else if(y==0)
{
for(int i=0; i<x; i++)
{
printf("0");
}
printf("\n");
return 0;
}
int aa01=a01;
int aa10=a10;
int cnt =0;
int ss=-1;
while(true)
{
y--;
if(aa01>x)
{
cnt ++;
aa01-=x;
}
else
{
ss=aa01;
aa01=0;
}
if(aa01==0)
break;
}
if(y>=0)
{
if(ss==-1)
{
for(int i=1; i<=y; i++)
printf("1");
for(int i=1; i<=x; i++)
printf("0");
for(int i=1; i<=cnt; i++)
printf("1");
printf("\n");
}
else
{
for(int i=1; i<=y; i++)
printf("1");
for(int i=1; i<=ss; i++)
printf("0");
printf("1");
for(int i=ss; i<x; i++)
printf("0");
for(int i=1; i<=cnt; i++)
printf("1");
printf("\n"); }
return 0;
}
}
/// 3
if(a000==0)
x=1;
if(a111==0)
y=0; if((x*y)==(a01+a10))
{
if((x+y)>1000000)
{
printf("Impossible\n");
return 0;
}
if(x==0&&y==0)
{
printf("Impossible\n");
return 0;
}
else if(x==0)
{
for(int i=0; i<y; i++)
{
printf("1");
}
printf("\n");
return 0;
}
else if(y==0)
{
for(int i=0; i<x; i++)
{
printf("0");
}
printf("\n");
return 0;
}
int aa01=a01;
int aa10=a10;
int cnt =0;
int ss=-1;
while(true)
{
y--;
if(aa01>x)
{
cnt ++;
aa01-=x;
}
else
{
ss=aa01;
aa01=0;
}
if(aa01==0)
break;
}
if(y>=0)
{
if(ss==-1)
{
for(int i=1; i<=y; i++)
printf("1");
for(int i=1; i<=x; i++)
printf("0");
for(int i=1; i<=cnt; i++)
printf("1");
printf("\n");
}
else
{
for(int i=1; i<=y; i++)
printf("1");
for(int i=1; i<=ss; i++)
printf("0");
printf("1");
for(int i=ss; i<x; i++)
printf("0");
for(int i=1; i<=cnt; i++)
printf("1");
printf("\n"); }
return 0;
}
}
/// 4
if(a000==0)
x=0;
if(a111==0)
y=0; if((x*y)==(a01+a10))
{
if((x+y)>1000000)
{
printf("Impossible\n");
return 0;
}
if(x==0&&y==0)
{
printf("Impossible\n");
return 0;
}
else if(x==0)
{
for(int i=0; i<y; i++)
{
printf("1");
}
printf("\n");
return 0;
}
else if(y==0)
{
for(int i=0; i<x; i++)
{
printf("0");
}
printf("\n");
return 0;
}
int aa01=a01;
int aa10=a10;
int cnt =0;
int ss=-1;
while(true)
{
y--;
if(aa01>x)
{
cnt ++;
aa01-=x;
}
else
{
ss=aa01;
aa01=0;
}
if(aa01==0)
break;
}
if(y>=0)
{
if(ss==-1)
{
for(int i=1; i<=y; i++)
printf("1");
for(int i=1; i<x; i++)
printf("0");
for(int i=1; i<=cnt; i++)
printf("1");
printf("\n");
}
else
{
for(int i=1; i<=y; i++)
printf("1");
for(int i=1; i<=ss; i++)
printf("0");
printf("1");
for(int i=ss; i<=x; i++)
printf("0");
for(int i=1; i<=cnt; i++)
printf("1");
printf("\n"); }
return 0;
}
}
printf("Impossible\n");
return 0;
}
else
{
printf("Impossible\n");
}
}
else
{
printf("Impossible\n");
}
}
AIM Tech Round 3 (Div. 2) A B C D的更多相关文章
- codeforce AIM tech Round 4 div 2 B rectangles
2017-08-25 15:32:14 writer:pprp 题目: B. Rectangles time limit per test 1 second memory limit per test ...
- AIM Tech Round 3 (Div. 2)
#include <iostream> using namespace std; ]; int main() { int n, b, d; cin >> n >> ...
- AIM Tech Round 3 (Div. 2) B
Description Vasya takes part in the orienteering competition. There are n checkpoints located along ...
- AIM Tech Round 3 (Div. 2) A
Description Kolya is going to make fresh orange juice. He has n oranges of sizes a1, a2, ..., an. Ko ...
- AIM Tech Round 3 (Div. 2) (B C D E) (codeforces 709B 709C 709D 709E)
rating又掉下去了.好不容易蓝了.... A..没读懂题,wa了好几次,明天问队友补上... B. Checkpoints 题意:一条直线上n个点x1,x2...xn,现在在位置a,求要经过任意n ...
- AIM Tech Round 3 (Div. 2) B 数学+贪心
http://codeforces.com/contest/709 题目大意:给一个一维的坐标轴,上面有n个点,我们刚开始在位置a,问,从a点开始走,走n-1个点所需要的最小路程. 思路:我们知道,如 ...
- AIM Tech Round 3 (Div. 2)D. Recover the String(贪心+字符串)
D. Recover the String time limit per test 1 second memory limit per test 256 megabytes input standar ...
- AIM Tech Round 4 (Div. 2)ABCD
A. Diversity time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- AIM Tech Round 4 (Div. 2)(A,暴力,B,组合数,C,STL+排序)
A. Diversity time limit per test:1 second memory limit per test:256 megabytes input:standard input o ...
随机推荐
- Android 自动化测试—robotium(八) 拖拽
本文来源于:http://xiaomaozi.blog.51cto.com/925779/933056 SeekBar控件 代码实现:http://luwenjie.blog.51cto.com/92 ...
- storm安装笔记以及提交拓扑任务
Storm -- Distributed and fault-tolerant realtime computation 这是一个分布式的.容错的实时计算系统 把Storm依赖组件的版本贴出来供各位参 ...
- 【SAP BO】【DI】DataService 服务无法启动。错误1069:由于登录失败而无法启动服务
重启BI服务器后,突然发现DataServices服务无法启动,提示: 错误 1069:由于登录失败而无法启动服务. 解决方法: (1)打开控制面板--> 服务 --> 右键点击Data ...
- 【oracle】解锁oracle用户,unlock
解除oracle用户的锁定状态,例如oracle数据库建立测试实例时默认建立的scott用户,一开始是处于locked状态的,现在我们需要将其解锁,步骤如下: (1)在cmd中登录sqlplus,例如 ...
- BZOJ3740 : pku2842 N-dimension Matching N维匹配
做$n$次递推求出$n$维Hash值即可,时间复杂度$O(nk)$. #include<cstdio> #define N 500010 int n,i,j,t,delta,ca,cb,a ...
- [转]复制虚拟机后linux中的eth0变成eth1问题
为什么原来的eth0会变成eth1? 很多Linux distribution使用udev动态管理设备文件,并根据设备的信息对其进行持久化命名.udev会在系统引导的过程中识别网卡,将mac地址和网卡 ...
- Codeforces Round #246 (Div. 2) B. Football Kit
题目的意思是求出每个队穿主场衣服和客场衣服的次数 每个队作为主场的次数是n-1,作为客场的次数是n-1 当每个队打主场的时候肯定穿的主场衣服 当每个队打客场时,如果客场与主场的衣服不同,则穿客场衣服 ...
- js中的this关键字详解
this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, 复制代码 代码如下: function test(){ this.x = 1; ...
- 【wikioi】1014 装箱问题
题目链接 算法:动态规划(01背包) 01背包思想:依次对待某一物体,考虑是否放入容量为V的背包中 用f[V]来表示容量为V的背包的最大价值,则决策是 f[V] = max{f[V], f[V-v[i ...
- Java_java动态编译整个项目,解决jar包找不到问题
java动态编译整个项目,解决jar包找不到问题原文:http://itzyx.com/index.php/javac/ 动态将java文件编译为class文件解决方案:将temp\sdl\src目录 ...