题目描述
在人类的神经系统中,每个信号都可以用?1或+1来表示。这些信号组合起来最后形成 了喜怒哀乐,酸甜苦辣,红黄绿蓝等各种各样的复杂信息。纳米探测科技的突破让生物学家 可以测量大脑中特定区域的完整逻辑功能。然而超大数据的处理一直是令 H 教授头疼的问 题。
 假设一个逻辑单元接受N个信号输入,并产生一个代表某种意义的实数值r。那么总共 可能的情况有2^N种。
通过长时间的累积测量, H 教授可以准确地获得输入信号与r的关系表:
 f:{-1,1}N →R  然而进一步研究发现,神经元的运算方式可以被建模为人们熟知的多项式。由于一个输 入
信号值的平方一定为1,所以我们可以用不含幂的2^N项的多项式来唯一表示任何一个逻辑f。 
例如
 x1 = +1; x2 = +1   x1 = +1; x2 = -1  x1 = -1; x2 = +1 x1 = -1; x2 = -1
        0                   1                2                3  
可以写成 f(x1,x2) = 1.5 - 0.5x2 - x1 研究一个逻辑单元的多项式形式对了解大脑工作十分有意义,于是
小 M 决定帮 H 教授 把测量出的逻辑关系表全部转换成多项式的形式。这么简单的工作一定难不倒编程能手
小M 的吧? 
题解
这题意思是给多项式的点值表达,让你把系数求出来。
关键是它的多项式很鬼畜,有x1,x2,还有x1,x2让人感觉很烦。
对于这么一个多项式a1+a2x1+a3x2+a4x1x2,我们把x1提出来,式子就变成了x1(a2+a4x2)+a1+a3x2。
把x1去掉,加号两边的东西是不是长得很像?
我们令两个点值表达只有x1不同,x1=-1时值为a,x1=1时值为b,那么左边那一坨就是(b-a)/2,右边那一坨就是(a+b)/2。
于是我们成功的把问题规模减小了一半。
其实这个思路和FFT几乎一模一样。
然后这道题的输出很诡异,要求字典序输出,可以用dfs实现。
还有我的操作有些鬼畜,导致最后分治出的序列和答案序列不一样,所以我又nlogn模拟了一遍把答案顺序排好。。
代码
  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. typedef long long ll;
  5. const int N=(<<)+;
  6. double x;
  7. int n,top,p[N];
  8. char s[N];
  9. inline int rd(){
  10. int x=;char c=getchar();bool f=;
  11. while(!isdigit(c)){if(c=='-')f=;c=getchar();}
  12. while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
  13. return f?-x:x;
  14. }
  15. ll gcd(ll x,ll y){if(x<)x=-x;if(y<)y=-y;return y?gcd(y,x%y):x;}
  16. struct fs{
  17. ll x,y;
  18. fs operator +(const fs &b)const{
  19. ll xx=x*b.y+y*b.x,yy=y*b.y*;
  20. ll g=gcd(yy,xx);
  21. xx/=g;yy/=g;
  22. return fs{xx,yy};
  23. }
  24. fs operator -(const fs &b)const{
  25. ll xx=x*b.y-y*b.x,yy=y*b.y*;
  26. ll g=gcd(yy,xx);
  27. xx/=g;yy/=g;
  28. return fs{xx,yy};
  29. }
  30. }dp[N];
  31. void dfs(int num,int x){
  32. if(num>n)return;
  33. p[++top]=x|(<<num-);
  34. dfs(num+,x|(<<num-));dfs(num+,x);
  35. }
  36. int main(){
  37. n=rd();
  38. for(int i=;i<(<<n);++i){
  39. int o=;scanf("%s%lf",s+,&x);
  40. for(int j=;j<=n;++j){
  41. o<<=;o|=(s[j]=='+'?:);
  42. }
  43. if(x>)dp[o].x=(int)(x*+0.1);//因为要向0取整,所以要判断正负
  44. else dp[o].x=(int)(x*-0.1);
  45. dp[o].y=;
  46. ll g=gcd(dp[o].x,dp[o].y);
  47. dp[o].x/=g;dp[o].y/=g;
  48. }
  49. for(int i=(<<n-);i>=;i>>=)
  50. for(int j=;j<(<<n);j+=(i<<))
  51. for(int k=;k<i;++k){
  52. fs x=dp[k+j],y=dp[k+i+j];
  53. dp[k+j]=y-x;dp[k+i+j]=x+y;
  54. }
  55. for(int i=;i<(<<n);++i){
  56. int x=i,l=,r=(<<n)-;
  57. while(l!=r){
  58. int mid=(l+r)>>;
  59. if(x&)r=mid;else l=mid+;x>>=;
  60. }
  61. if(l<i)swap(dp[l],dp[i]);
  62. }
  63. dfs(,);
  64. for(int i=;i<(<<n);++i){
  65. int x=p[i];
  66. if(!dp[x].x)continue;
  67. if(dp[x].y<)dp[x].y=-dp[x].y,dp[x].x=-dp[x].x;
  68. if(dp[x].y!=)
  69. printf("%lld/%lld ",dp[x].x,dp[x].y);
  70. else printf("%lld ",dp[x].x);
  71. for(int j=;j<=n;++j)if(x&(<<j-))printf("x%d",j);
  72. printf("\n");
  73. }
  74. return ;
  75. }
 

[HEOI2014]逻辑翻译(分治)的更多相关文章

  1. [HEOI2014]逻辑翻译

    ywy_c_asm的良心题解 是道好题 体现了二进制位的形象递归思想,以及将FWT的思路(都是拆位分治)用到题目中的典范 可以暴力高斯消元.完全没有利用2^N以及+-1的良好性质 发现项数,方程和二进 ...

  2. 洛谷 4106 / bzoj 3614 [HEOI2014]逻辑翻译——思路+类似FWT

    题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...

  3. 【Moqui业务逻辑翻译系列】Sales Representative Seeks Prospects and Opportunities 销售代表寻找期望合作对象和机会

    h1. Sales Representative Seeks Prospects and Opportunities 销售代表寻找期望合作对象和合作机会 h4. Ideas to incorporat ...

  4. 【Moqui业务逻辑翻译系列】Shipment Receiver Receives Shipment with Packing Slip but no PO

    Shipment Receiver receives shipment. It has invoice tucked into it. Receiver records vendor name, ve ...

  5. 【Moqui业务逻辑翻译系列】Story of Online Retail Company 在线零售公司的故事

    h1. Story of Online Retail Company 在线零售公司的故事 Someone decides to sell a product. [Product Marketer Ma ...

  6. 【Moqui业务逻辑翻译系列】--UBPL index

    h2. [UBPL Introduction] ubpl介绍h2. [Actor Definitions] 行为定义h2. General Business Process Stories 通常的商业 ...

  7. 【Moqui业务逻辑翻译系列】--UBPL Introduction同意的商业处理文库介绍

    h1. UBPL Introduction 通用的商业处理文库介绍h4. Why a Universal Business Process Library? 为什么需要通用的商业处理文库? The g ...

  8. 洛谷 P4106 / bzoj 3614 [ HEOI 2014 ] 逻辑翻译 —— 思路+递归

    题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...

  9. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

随机推荐

  1. Eclipse支持文件UTF-8编码

    Eclipse修改编码格式_百度经验https://jingyan.baidu.com/article/2009576193ee38cb0721b416.html 这篇最棒 如何为eclipse中的文 ...

  2. 【学亮IT手记】Servlet的生命周期

    1.1 Servlet的生命周期 1.1.1 Servlet的生命周期概述 1.1.1.1 什么是生命周期 生命周期:一个对象从创建到销毁过程. 1.1.1.2 Servlet的生命周期(*****) ...

  3. 解决ERROR 1130: Host '192.168.11.1' is not allowed to connect to this MySQL

    使用navicat进行远程登录MySQL时,报出 ERROR 1130: Host '192.168.11.1' is not allowed to connect to this MySQL  se ...

  4. java的强制类型转换

    java强制类型转换  详细连接https://www.cnblogs.com/kuangwong/p/6198862.html 在Java项目的实际开发和应用中,常常需要用到将对象转为String这 ...

  5. Android——Service介绍与例子

    官方定义:Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件.其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行.另外,一个组件 ...

  6. Saltstack 安装与常用模块

    一.介绍 saltstack是基于C/S服务模式,在该架构中,服务器端叫做Master,客户端叫做Minion.传统的C/S模式我们这样理解,客户端发送请求给服务器端,服务器端接受到来自客户端的请求并 ...

  7. linux查看端口是否开放

    在讨论这个问题前,我们先来了解一下物理端口.逻辑端口.端口号等计算机概念. 端口相关的概念: 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型.物理端口指的是物理存在的端口,如ADSL M ...

  8. python 编码格式

    1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...

  9. lr分布式测试--笔记

    LR 架构: controller做测试控制 scenario做测试场景的控制 vuser模拟用户和 load generator做负载产生 通过MI listener 跨防火墙监听 来实现分布式测试 ...

  10. 错误模块名称: KERNELBASE.dll错误

    今天在部署一个C/S程序的时候出了bug,日志都没有记载:本地调试当然是没问题的,所以不是代码问题,百度之发现KERNELBASE.dll这个文章说的比较靠谱,仔细研究了自己的配置文件后,果然是配置文 ...