http://acm.bnu.edu.cn/v3/external/gym/101485.pdf

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
struct node
{
ll x;
ll y;
int id;
}a[maxn];
int n;
ll b[maxn*];
int cnt;
struct Edge
{
int to;
int nxt;
int w;
}e[maxn*];
int tot;
int head[maxn];
map<ll,int> mp;
bool vis[maxn*];
int used[maxn*];
char op[maxn];
void init()
{
tot=;
memset(head,-,sizeof(head));
memset(vis,false,sizeof(vis));
memset(used,-,sizeof(used));
}
void add(int u,int v)
{
e[tot].to=v;
e[tot].w=;
e[tot].nxt=head[u];
head[u]=tot++;
}
int dfs(int u)
{
for(int i=head[u];i!=-;i=e[i].nxt)
{
int v=e[i].to;
if(!vis[v]&&e[i].w)
{
vis[v]=true;
if(used[v]==-||dfs(used[v]))
{
used[v]=u;
return ;
}
}
}
return ;
} void output()
{
for(int i=;i<cnt;i++)
{
if(used[mp[b[i]]]==-) continue;
int id=used[mp[b[i]]];
if(a[id].x+a[id].y==b[i]) op[id]='+';
else if(a[id].x-a[id].y==b[i]) op[id]='-';
else op[id]='*';
}
for(int i=;i<=n;i++)
{
printf("%lld %c %lld",a[i].x,op[i],a[i].y);
ll res;
if(op[i]=='+') res=a[i].x+a[i].y;
else if(op[i]=='-') res=a[i].x-a[i].y;
else if(op[i]=='*') res=a[i].x*a[i].y;
printf(" = %lld\n",res);
}
}
int main()
{
while(~scanf("%d",&n))
{
init();
mp.clear();
cnt=;
for(int i=;i<=n;i++)
{
scanf("%lld%lld",&a[i].x,&a[i].y);
a[i].id=i;
b[cnt++]=a[i].x+a[i].y;
b[cnt++]=a[i].x-a[i].y;
b[cnt++]=a[i].x*a[i].y;
}
sort(b,b+cnt);
cnt=unique(b,b+cnt)-b;
// for(int i=0;i<cnt;i++)
// {
// cout<<b[i]<<" ";
// }
// cout<<endl;
for(int i=;i<cnt;i++)
{
mp[b[i]]=i+;
}
for(int i=;i<=n;i++)
{
ll x=a[i].x+a[i].y;
ll y=a[i].x-a[i].y;
ll z=a[i].x*a[i].y;
int posx=mp[x];
int posy=mp[y];
int posz=mp[z];
// cout<<posx<<" "<<posy<<" "<<posz<<endl;
add(i,posx);
if(posy!=posx) add(i,posy);
if(posz!=posy && posz!=posx) add(i,posz);
}
int ans=;
for(int i=;i<=n;i++)
{
memset(vis,false,sizeof(vis));
ans+=dfs(i);
}
if(ans<n)
{
puts("impossible");
}
else
{
output();
}
}
return ;
}

最新文章

  1. NoSQL数据库探讨之一 - 为什么要用非关系数据库?
  2. python的反射
  3. .net学习总结
  4. Socket状态变迁图
  5. VC7 HTML Dialog开发实例讲解
  6. web.config中&lt;customErrors&gt;节点
  7. Microsoft Office 2010 Pro VOL简体中文正式版
  8. [LeetCode]题解(python):015-3Sum
  9. Vue2 后台管理系统解决方案
  10. 一个环形公路,上面有N个站点,A1, ..., AN,其中Ai和Ai+1之间的距离为Di,AN和A1之间的距离为D0。 高效的求第i和第j个站点之间的距离,空间复杂度不超过O(N)。
  11. python深拷贝,浅拷贝
  12. java Swing组件和事件处理(二)
  13. 关于Discuz! X系列远程代码执行漏洞
  14. oracle中scott/tiger、sys、SYSDBA、system都是什么用
  15. oracle 批量更新之update case when then
  16. HighCharts终极版本
  17. Oracle 13c OEM 安装手册
  18. 关于解决DevExpress用DevExpress patch工具破解后经常弹出试用框的问题
  19. 前端给div加滚动条样式修改
  20. 【转】64位ORACLE客户端上plsql无法识别ORACLE_HOME解决方案

热门文章

  1. codevs 3278 最小m 段和问题
  2. 推荐一个markdown格式转html格式的开源JavaScript库
  3. 分布式锁----浅析redis实现
  4. smarty 运算符列表
  5. python virtualenv学习
  6. pssh批量管理服务器
  7. 控制mysql数字转换
  8. eclipse中新建maven项目无法添加src/main/java问题
  9. MIP经典问题:旅行商问题 (traveling salesman problem)
  10. Experiments done