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的更多相关文章

  1. BZOJ_1507_Editor_[NOI2003]_(Splay)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1507 简单区间操作的模板题 1507: [NOI2003]Editor Time Limit: ...

  2. NOI2003 文本编辑器editor

    1507: [NOI2003]Editor Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 1908  Solved: 738[Submit][Statu ...

  3. BZOJ 1509: [NOI2003]逃学的小孩( 树形dp )

    树形dp求出某个点的最长3条链a,b,c(a>=b>=c), 然后以这个点为交点的最优解一定是a+2b+c.好像还有一种做法是求出树的直径然后乱搞... ----------------- ...

  4. BZOJ_1269&&1507_[AHOI2006]文本编辑器editor&&[NOI2003]Editor

    BZOJ_1269&&1507_[AHOI2006]文本编辑器editor&&[NOI2003]Editor 题意: 分析: splay模拟即可 注意1507的读入格式 ...

  5. [NOI2003],[AHOI2006]文本编辑器

    嘟嘟嘟 [NOI2003]的其实就是一个板子--所以我就不说啥了. 唯一需要注意的是读入字符(哎--):题中说"中间可能有空格,请忽略"的意思是要在程序里特判掉,不是不管他-- 输 ...

  6. 【bzoj1507】[NOI2003]Editor /【bzoj1269】[AHOI2006]文本编辑器editor Splay

    [bzoj1507][NOI2003]Editor 题目描述 输入 输入文件editor.in的第一行是指令条数t,以下是需要执行的t个操作.其中: 为了使输入文件便于阅读,Insert操作的字符串中 ...

  7. BZOJ1507 [NOI2003]Editor 【splay】

    1507: [NOI2003]Editor Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 4129  Solved: 1660 [Submit][St ...

  8. 【BZOJ1509】[NOI2003]逃学的小孩 直径

    [BZOJ1509][NOI2003]逃学的小孩 Description Input 第一行是两个整数N(3  N  200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的 ...

  9. [NOI2003] 文本编辑器 (splay)

    复制炸格式了,就不贴题面了 [NOI2003] 文本编辑器 Solution 对于光标的移动,我们只要记录一下现在在哪里就可以了 Insert操作:手动维护中序遍历结果,即每次取中点像线段树一样一样递 ...

随机推荐

  1. 采用Unity快速开发高质量游戏的若干优化建议

    http://files.cnblogs.com/123ing/%E9%87%87%E7%94%A8Unity%E5%BF%AB%E9%80%9F%E5%BC%80%E5%8F%91%E9%AB%98 ...

  2. Linux查看和结束进程命令详解

    在ubuntu中,终止一个进程或终止一个正在运行的程序,一般是通过 kill .killall.pkill.xkill 等进行. ----------------------------------- ...

  3. 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&&向社区贡献代码

    加入OpenStack社区 https://launchpad.net/,注册用户(597092663@qq.com/Admin@123) 修改个人信息,配置SSH keys.OpenPGP keys ...

  4. 57. 数对之差的最大值:4种方法详解与总结[maximum difference of array]

    [本文链接] http://www.cnblogs.com/hellogiser/p/maximum-difference-of-array.html [题目] 在数组中,数字减去它右边的数字得到一个 ...

  5. mysql 基于lvm快照的备份

    1.查看磁盘数 ls /dev/ | grep sd 2.快照备份 pvcreate /dev/sdb #制作成物理卷vgcreate testvg /dev/sdblvcreate -L200M - ...

  6. 利用 ffmpeg + ImageMagick + 批处理 生成高品质gif动画

    这几天研究如何生成高品质 gif 动画,重新研究 ffmpeg, 目前有一些自动转换工具,效果不佳. Video_to_320x180.bat 把 out.avi 转换成320x180的 01.avi ...

  7. Java for LeetCode 025 Reverse Nodes in k-Group

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  8. 【python】linux将python改为默认3.4版本

    Python3.4默认是安装在/usr/local/lib/python3.4目录下,需要删除默认python link文件,重新建立连接关系. 使用ln -s命令来修改,命令如下: sudo rm ...

  9. 【Python爬虫】入门知识

    爬虫基本知识 这阵子需要用爬虫做点事情,于是系统的学习了一下python爬虫,觉得还挺有意思的,比我想象中的能干更多的事情,这里记录下学习的经历. 网上有关爬虫的资料特别多,写的都挺复杂的,我这里不打 ...

  10. 工作空间项目不存在,eclipse中项目删不掉

    解决:E:\androidworkspaceall\.metadata\.plugins\org.eclipse.core.resources\.projects  ->删除对应项目