Codeforces Round #347 (Div. 2) B. Rebus
2016-05-14 00:03
393 查看
You are given a rebus of form ? + ? - ? + ? = n, consisting of only question marks, separated by arithmetic operation '+' and '-', equality
and positive integer n. The goal is to replace each question mark with some positive integer from
1 to n, such that equality holds.
Input
The only line of the input contains a rebus. It's guaranteed that it contains no more than
100 question marks, integer
n is positive and doesn't exceed 1 000 000, all letters and integers are separated by spaces, arithmetic operations are located only between question marks.
Output
The first line of the output should contain "Possible" (without quotes) if rebus has a solution and "Impossible" (without quotes) otherwise.
If the answer exists, the second line should contain any valid rebus with question marks replaced by integers from
1 to n. Follow the format given in the samples.
Examples
Input
Output
Input
Output
Input
Output
分析:设加号有 a - 1个,减号有b个,那么当且仅当a - b*n <= n <= a*n - b 时有解,解可以二分出加减的总值后构造出。
and positive integer n. The goal is to replace each question mark with some positive integer from
1 to n, such that equality holds.
Input
The only line of the input contains a rebus. It's guaranteed that it contains no more than
100 question marks, integer
n is positive and doesn't exceed 1 000 000, all letters and integers are separated by spaces, arithmetic operations are located only between question marks.
Output
The first line of the output should contain "Possible" (without quotes) if rebus has a solution and "Impossible" (without quotes) otherwise.
If the answer exists, the second line should contain any valid rebus with question marks replaced by integers from
1 to n. Follow the format given in the samples.
Examples
Input
? + ? - ? + ? + ? = 42
Output
Possible 9 + 13 - 39 + 28 + 31 = 42
Input
? - ? = 1
Output
Impossible
Input
? = 1000000
Output
Possible 1000000 = 1000000
分析:设加号有 a - 1个,减号有b个,那么当且仅当a - b*n <= n <= a*n - b 时有解,解可以二分出加减的总值后构造出。
#include <cstdio> #include <iostream> using namespace std; string S; int n,tot,a,b,f[105],A[105],B[105]; int main() { a++; while(cin>>S && S!="=") { if(S == "?") continue; if(S == "+") a++,f[++tot] = 1; else b++,f[++tot] = -1; } cin>>n; if(a*n - b < n || a - b*n > n) { cout<<"Impossible"<<endl; return 0; } else cout<<"Possible"<<endl; int s = b,t = b*n; while(s != t) { int mid = (s + t) / 2; if(mid + n >= a) t = mid; else s = mid + 1; } s -= b; for(int i = 1;i <= b;i++) { B[i] = 1; B[i] += min(n-1,s); s -= min(n-1,s); } t += n - a; for(int i = 1;i <= a;i++) { A[i] = 1; A[i] += min(n-1,t); t -= min(n-1,t); } cout<<A[1]; int nowa = 2,nowb = 1; for(int i = 1;i <= tot;i++) if(f[i] == 1) cout<<" + "<<A[nowa++]; else cout<<" - "<<B[nowb++]; cout<<" = "<<n<<endl; }
相关文章推荐
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛
- 在ASP.NET 2.0中操作数据之四十二:DataList和Repeater数据排序(一)
- 在ASP.NET 2.0中操作数据之四十三:DataList和Repeater数据排序(二)
- 在ASP.NET 2.0中操作数据之四十四:DataList和Repeater数据排序(三)
- 在ASP.NET 2.0中操作数据之四十五:DataList和Repeater里的自定义Button
- 在ASP.NET 2.0中操作数据之四十六:使用SqlDataSource控件检索数据
- 在ASP.NET 2.0中操作数据之四十七:用SqlDataSource控件插入、更新、删除数据
- python爬取51job中hr的邮箱
- 详解Python函数作用域的LEGB顺序
- linux常用命令笔记
- python实现SMTP邮件发送功能
- Smarty高级应用之缓存操作技巧分析
- php文件上传类完整实例
- yii2使用ajax返回json的实现方法
- php+html5+ajax实现上传图片的方法
- PHP pear安装配置教程
- PHP单例模式是什么 php实现单例模式的方法
- php基于CodeIgniter实现图片上传、剪切功能
- thinkphp框架下404页面设置 仅三步
- MySQL修改时区的方法小结