BZOJ1508 : [NOI2003]Game
a[i][j]:i移动一根变成j是否可能
b[i][j]:i增加一根变成j是否可能
枚举在一个数字中移动的情况以及在两个数字中移动的情况
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define N 1010
char s[N];int n,m,i,j,I,J,k,t,a[10][10],b[10][10],pow[8],v[N],w[N],e[N][8],l[N],pos;long long sum,tmp;
void ok(){
for(i=1;i<=pos;i++){
if(i>1)putchar(w[i]==1?'+':'-');else if(w[i]!=1)putchar('-');
for(j=l[i]-1;~j;j--)printf("%d",e[i][j]);
}
for(putchar('=');i<=n;i++){
if(i>pos+1)putchar(w[i]==1?'-':'+');else if(w[i]==1)putchar('-');
for(j=l[i]-1;~j;j--)printf("%d",e[i][j]);
}
putchar('#');
std::exit(0);
}
int main(){
for(pow[0]=i=1;i<8;i++)pow[i]=pow[i-1]*10;
a[0][6]=a[0][9]=a[2][3]=a[3][2]=a[3][5]=a[5][3]=a[6][0]=a[6][9]=a[9][0]=a[9][6]=b[0][8]=b[1][7]=b[3][9]=b[5][6]=b[5][9]=b[6][8]=b[9][8]=1;
scanf("%s",s+1),n=strlen(s+1);
if(s[1]=='-')for(w[n=1]=-1,i=2;s[i]>='0'&&s[i]<='9';i++)(v[n]*=10)+=s[i]-'0',e[n][l[n]++]=s[i]-'0';
else for(w[n=1]=i=1;s[i]>='0'&&s[i]<='9';i++)(v[n]*=10)+=s[i]-'0',e[n][l[n]++]=s[i]-'0';
while(s[i]!='=')for(w[++n]=s[i++]=='+'?1:-1;s[i]>='0'&&s[i]<='9';i++)(v[n]*=10)+=s[i]-'0',e[n][l[n]++]=s[i]-'0';
pos=n;
if(s[++i]=='-')for(w[++n]=1,i++;s[i]>='0'&&s[i]<='9';i++)(v[n]*=10)+=s[i]-'0',e[n][l[n]++]=s[i]-'0';
else for(w[++n]=-1;s[i]>='0'&&s[i]<='9';i++)(v[n]*=10)+=s[i]-'0',e[n][l[n]++]=s[i]-'0';
while(s[i]!='#')for(w[++n]=s[i++]=='-'?1:-1;s[i]>='0'&&s[i]<='9';i++)(v[n]*=10)+=s[i]-'0',e[n][l[n]++]=s[i]-'0';
for(i=1;i<=n;i++)for(sum+=v[i]*w[i],j=0,k=l[i]-1;j<k;j++,k--)t=e[i][j],e[i][j]=e[i][k],e[i][k]=t;
for(i=1;i<=n;i++)for(j=0;j<l[i];j++)for(t=0;t<=9;t++)if(a[e[i][j]][t]){
tmp=sum+w[i]*(t-e[i][j])*pow[j];
if(!tmp)e[i][j]=t,ok();
}
for(i=1;i<=n;i++)for(j=0;j<l[i];j++)for(I=1;I<=n;I++)for(J=0;J<l[I];J++)if(!(i==I&&j==J))for(k=0;k<=9;k++)for(t=0;t<=9;t++)if(b[e[i][j]][k]&&b[t][e[I][J]]){
tmp=sum+w[i]*(k-e[i][j])*pow[j]+w[I]*(t-e[I][J])*pow[J];
if(!tmp)e[i][j]=k,e[I][J]=t,ok();
}
return puts("No"),0;
}
BZOJ1508 : [NOI2003]Game的更多相关文章
- BZOJ_1507_Editor_[NOI2003]_(Splay)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1507 简单区间操作的模板题 1507: [NOI2003]Editor Time Limit: ...
- NOI2003 文本编辑器editor
1507: [NOI2003]Editor Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 1908 Solved: 738[Submit][Statu ...
- BZOJ 1509: [NOI2003]逃学的小孩( 树形dp )
树形dp求出某个点的最长3条链a,b,c(a>=b>=c), 然后以这个点为交点的最优解一定是a+2b+c.好像还有一种做法是求出树的直径然后乱搞... ----------------- ...
- BZOJ_1269&&1507_[AHOI2006]文本编辑器editor&&[NOI2003]Editor
BZOJ_1269&&1507_[AHOI2006]文本编辑器editor&&[NOI2003]Editor 题意: 分析: splay模拟即可 注意1507的读入格式 ...
- [NOI2003],[AHOI2006]文本编辑器
嘟嘟嘟 [NOI2003]的其实就是一个板子--所以我就不说啥了. 唯一需要注意的是读入字符(哎--):题中说"中间可能有空格,请忽略"的意思是要在程序里特判掉,不是不管他-- 输 ...
- 【bzoj1507】[NOI2003]Editor /【bzoj1269】[AHOI2006]文本编辑器editor Splay
[bzoj1507][NOI2003]Editor 题目描述 输入 输入文件editor.in的第一行是指令条数t,以下是需要执行的t个操作.其中: 为了使输入文件便于阅读,Insert操作的字符串中 ...
- BZOJ1507 [NOI2003]Editor 【splay】
1507: [NOI2003]Editor Time Limit: 5 Sec Memory Limit: 162 MB Submit: 4129 Solved: 1660 [Submit][St ...
- 【BZOJ1509】[NOI2003]逃学的小孩 直径
[BZOJ1509][NOI2003]逃学的小孩 Description Input 第一行是两个整数N(3 N 200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的 ...
- [NOI2003] 文本编辑器 (splay)
复制炸格式了,就不贴题面了 [NOI2003] 文本编辑器 Solution 对于光标的移动,我们只要记录一下现在在哪里就可以了 Insert操作:手动维护中序遍历结果,即每次取中点像线段树一样一样递 ...
随机推荐
- Windows2003操作系统SQL Server 2008安装图解(详细)
最近不少用户在windows2003 server 32位操作系统上安装SQL Server2008总是失败,出现大量错误.今天经过通过我反复测试安装,找出了一个便捷的安装方法,节省大家宝贵时间,具体 ...
- 二模Day2题解
小明搬家 题目描述 小明要搬家了,大家都来帮忙. 小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼. 最开始X个箱子都在1楼,但是经过一段混乱的搬运已经乱掉了.最后大家发现这样混乱地搬运过程效率太 ...
- mysql 多表连接
现有表R,S如下: 笛卡尔积 select * from R,S; 结果: 注:不需要任何条件.结果为两张表函数相乘(3x3=9). 自连接 select e.empno,e.ename,m.empn ...
- poj3904
题意:给出n(n<10000)个数,这些数<=10000,要求选出四个数字且他们的最大公约数为1的(注意:不需要两两互质),有多少种选法. 分析: 容斥原理 假设平面上有一些圆,互相之间有 ...
- GPL协议的MySQL数据库
网络上多数朋友担心甲骨文会对MySQL软件采用收费模式,多数朋友也不清楚MySQL开源到底是什么模式,开源=免费嘛?是很多的疑问?MySQL是遵守双重协议的,一个是GPL授权协议,一个是商用授权协议( ...
- Linux卸载系统自带的JDK
安装Linux后,一般系统都会自带openjdk,我们开发中都需要自己安装,所以需要卸载之前的,以CentOS为例,卸载方法如下: 首先执行命令查看存在哪些已安装的包 rpm -qa | grep j ...
- Java异常与异常处理简单使用
异常就是程序运行过程中阻止当前方法或作用域继续执行的问题: 任何程序都不能保证完全正常运行,当发生异常时,需要我们去处理异常,特别是一些比较重要的场景,异常处理的逻辑也会比较复杂,比如:给用户提示.保 ...
- Android之自定义控件深入
本文主要讲述两个知识点:popwindow的使用和通过继承View实现一个自定义控件,实现点击,手动按钮的效果. popwindow的使用 //定义 popupWindow popWin = new ...
- java基础知识回顾之javaIO类总结
java IO体系图 IO流的操作规律总结: 1,明确体系: 数据源:InputStream ,Reader 数据汇:OutputStream,Writer 2,明确数据:因为数据分两种:字节,字符. ...
- Windows下进程间通信及数据共享
进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据以及它可利用的系统资源(如文件.管道等)组成. 多进程/多线程是Windows操作系统的一个基本特征.Microsoft W ...