【BZOJ 3614】 [Heoi2014]逻辑翻译|乱搞|辣鸡题目|不要入坑

po姐题解 《论一道题究竟如何出才能同时卡时间卡内存卡精度卡输入卡输出卡评测》

辣鸡题目 颓我精神 耗我时间!!!

把每个值带入假想的式子中 就变成啦 解方程

然后

然后

然后

然后

尼玛 输出这么麻烦 最后一个点跑了 5s 输出跑了 4s


#include <cstdio>
#include <iostream>
using namespace std;
const int N = 21;
int f[1<<N],n,a,b,mu,nn;
char s[N];
int gcd(int x,int y) {return y==0?x:gcd(y,x%y);}
void get()
{
    double c;int tmp=0;
    scanf("%s %lf",s+1,&c);
    for(int i=1;i<=n;i++)
        tmp<<=1,tmp|=(s[i]=='+'?1:0);
    if(c>0) f[tmp]=(int)(c*100.0+0.5);
    else f[tmp]=(int)(c*100-0.5); 
}
void p(int x,int y)
{
    if(x==0) return ;
    if(x<0) printf("-"),x=-x;
    int tmp=gcd(x,mu);
    if(tmp==mu) printf("%d",x/mu);
    else printf("%d/%d",x/tmp,mu/tmp);
    if(y!=0) printf(" ");
    for(int i=1;i<=n;i++,y<<=1)
        if(y&(nn>>1)) printf("x%d",i);
    printf("\n");
}
void OUT(int now,int x)
{
    int tmp=((x<<1)|1)<<(n-now);
    p(f[tmp],tmp);if(now==n) return ;
    OUT(now+1,(x<<1)|1);OUT(now+1,(x<<1));
}
int main()
{
    scanf("%d",&n);mu=100<<n;
    nn= 1<<n;
    for(int i=0;i<nn;i++) get();
    for(int i=0;i<n;i++)
    {
        int d=1<<i;
        for(int j=0;j<nn;j+=d*2)
            for(int k=j;k<j+d;k++)
            {
                a=f[k],b=f[k+d];
                f[k]=a+b;
                f[k+d]=b-a;
            }
    }
    p(f[0],0);OUT(1,0);
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值