先把所有可能的答案算出来,每个算式一个点,每个结果一个点,然后如果一个算式能算出一个结果,那么就连一条边

然后跑匈牙利,没有完美匹配就是impossible

每个算式最多有3个结果,所以边数是O(n)的,所以匈牙利的复杂度就是O(n^2)的

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <map>
#define ll long long
#define N 77777
#define M 77777 using namespace std;
inline int read(){
int ret=0;char ch=getchar();
bool flag=0;
while (ch<'0'||ch>'9'){
flag=ch=='-';
ch=getchar();
}
while ('0'<=ch&&ch<='9'){
ret=ret*10-48+ch;
ch=getchar();
}
return flag?-ret:ret;
} struct edge{
int adj,next,op;
edge(){}
edge(int _adj,int _next,int _op):adj(_adj),next(_next),op(_op){}
} e[M];
int n,g[N],m;
void AddEdge(int u,int v,int op){
e[++m]=edge(v,g[u],op);g[u]=m;
} int fx[N],fy[N],fop[N];
bool vis[N/3];
int dfs(int u){
if (vis[u]) return 0;
vis[u]=1;
for (int i=g[u];i;i=e[i].next){
int v=e[i].adj;
if (!fy[v]||dfs(fy[v])){
fy[v]=u;fx[u]=v;fop[u]=e[i].op;
return 1;
}
}
return 0;
} char ch[3]={'+','-','*'};
inline ll calc(ll x,ll y,int op){
if (op==0) return x+y;
else if (op==1) return x-y;
else return x*y;
} ll a[N],b[N];
map<ll,int> s;int cnt; int main(){
n=read();
s.clear();
map<ll,int>::iterator it;
ll tmp;
for (int i=1;i<=n;++i){
a[i]=read();b[i]=read();
for (int op=0;op<3;++op){
it=s.find(calc(a[i],b[i],op));
if (it==s.end()) s.insert(make_pair(calc(a[i],b[i],op),++cnt));
AddEdge(i,s.find(calc(a[i],b[i],op))->second,op);
}
} int tot=0;
memset(fx,0,sizeof(fx));
memset(fy,0,sizeof(fy));
for (int i=1;i<=n;++i)if (!fx[i]){
memset(vis,0,sizeof(vis));
tot+=dfs(i);
}
if (tot<n){puts("impossible");return 0;}
for (int i=1;i<=n;++i)
printf("%lld %c %lld = %lld\n",a[i],ch[fop[i]],b[i],calc(a[i],b[i],fop[i]));
return 0;
}

  

bzoj4429: [Nwerc2015] Elementary Math小学数学的更多相关文章

  1. 【BZOJ4429】[Nwerc2015] Elementary Math小学数学 最大流

    [BZOJ4429][Nwerc2015] Elementary Math小学数学 Description Ellen给她的学生教小学数学.期末考试已经来临了.考试有n个题目,每一个题目学生们都要对一 ...

  2. sdut 2445 小学数学

    小学数学 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...

  3. JavaScript Math(数学对象)

    Math(数学对象) Math 算术函数和常量 Math.abs( ) 计算绝对值 Math.acos( ) 计算反余弦值 Math.asin( ) 计算反正弦值 Math.atan( ) 计算反正切 ...

  4. JAVA之旅(二十三)——System,RunTime,Date,Calendar,Math的数学运算

    JAVA之旅(二十三)--System,RunTime,Date,Calendar,Math的数学运算 map实在是太难写了,整理得我都晕都转向了,以后看来需要开一个专题来讲这个了,现在我们来时来学习 ...

  5. C#【结对编程作业】小学数学习题助手

    一.软件成品展示 软件本体下载(包括程序及其更新日志,源码工程包,UML图,API接口文档,算法介绍文档,算式计算excel实例,浅查重程序) 链接: http://pan.baidu.com/s/1 ...

  6. PHP 基础篇 - PHP 的 BC MATH 系列数学函数

    一.常见问题 用 PHP 做计算时经常会遇到精度带来的问题,下面来看两个常见的例子: 1. 运算比较 下面表达式输出的结果不是相等: <?php echo 2.01 - 0.01 == 2 ? ...

  7. Java.util.Math类--数学相关的工具类

    Math类--数学相关的工具类 java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作. public static double abs(double ...

  8. 123457123456#2#----com.MCgame.ShuXueKoSuan98--前拼后广--儿童小学数学口算Game-mc22222

    com.MCgame.ShuXueKoSuan98--前拼后广--儿童小学数学口算Game-mc

  9. Math concepts / 数学概念

    链接网址:Math concepts / 数学概念 – https://www.codelast.com/math-concepts-%e6%95%b0%e5%ad%a6%e6%a6%82%e5%bf ...

随机推荐

  1. 模拟placeholder支持ie8以下处理了密码框只读的问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. redis-cache中的callback

    这个是mybatis/redis-cache中关键类  RedisCache  的源码 /** * Copyright 2015 the original author or authors. * * ...

  3. PAT 1016. 部分A+B (15)

    正整数A的"DA(为1位整数)部分"定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的"6部分"PA是66,因为A中有 ...

  4. VS2010 生成Xml格式的注释文档

    项目, 属性, build, 勾选xml document file, 重新build, 即可生成xml注释文件, 然后还得找工具软件(看到anytao推荐SandCastle) 生成更易读的帮助文档 ...

  5. 通用权限管理系统数据字典 V3.9 版本,欢迎开发个各种业务系统的朋友们,参考表结构

    C#.NET通用权限管理系统组件数据字典 导  航 ◇ (01) BaseItemDetails ◇ (02) BaseItems ◇ (03) BaseLog ◇ (04) BaseMessage ...

  6. Centos 7 安装 和 卸载 Mysql5.7(压缩包)

    今天装的了mysql,遇到了很多问题,好在最后一一解决了,现在记录在此,防止日后老路重走... 1.下载 当然是去官网,下一个linux下的版本,64位的 tar.gz,好吧这里贴个名字--[mysq ...

  7. How do I list the files in a directory?

    原文地址:How do I list the files in a directory? You want a list of all the files, or all the files matc ...

  8. 批处理将字符串输出到Windows剪贴板

    批处理将字符串输出到Windows剪贴板 2016-06-30 23:29 339人阅读 评论(0) 收藏 举报 版权声明:作者:N3verL4nd 出处:http://blog.csdn.net/x ...

  9. OpenCV中的神器Image Watch

    Image Watch是在VS2012上使用的一款OpenCV工具,能够实时显示图像和矩阵Mat的内容,跟Matlab很像,方便程序调试,相当好用.跟VS2012配合使用,简直就是一款神器!让我一下就 ...

  10. .net框架中少有人知的扩展cmod

    最近在利用metadata api抽取.net的原数据信息,发现了不少“坑”,也发现了不少常年用着c#的人都不知道的扩展. 说到.net原数据的可扩展性,第一个让人能想到的就是CustomAttrib ...