抽球游戏(fwt)
2024-08-30 13:39:50
地址:https://nanti.jisuanke.com/t/26017
分析:
现在是给定p,求是否存在这样的数列c,我们可以让p进行fwt变换,然后把点值都三次方根,然后再把得到的点值ufwt成系数
这题主要是判断无解的情况:
1、开三次方根后不是整数
2、最后得到的系数中有负数或者和不为给定的n
3、最后ufwt的过程中出现了非整数
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int a[maxn+];
int n;
void fwt(int *a,int n)
{
for(int d=;d<n;d<<=)
for(int m=d<<,i=;i<n;i+=m)
for(int j=;j<d;j++)
{
int x=a[i+j],y=a[i+j+d];
a[i+j]=x+y,a[i+j+d]=x-y;
}
}
bool ufwt(int *a,int n)
{
for(int d=;d<n;d<<=)
for(int m=d<<,i=;i<n;i+=m)
for(int j=;j<d;j++)
{
int x=a[i+j],y=a[i+j+d];
// printf("%d %d\n",i+j,i+j+d);
if((x+y)%!=) return ;
if((x-y)%!=) return ;
a[i+j]=(x+y)/,a[i+j+d]=(x-y)/;
}
return ;
}
bool solve()
{
fwt(a,);
//for(int i=0;i<64;++i) printf("%d ",a[i]);printf("\n");
for(int i=;i<;++i)
{ int type=a[i]<;
int num=abs(a[i]); //printf("%.9f\n",pow(-1,1.0/3));
a[i]=round(pow(num,1.0/)); //printf("%d %d %d\n",i,a[i],num);
if(a[i]*a[i]*a[i]!=num) return ;
if(type) a[i]=-a[i];
}
//printf("ok\n");
if(!ufwt(a,)) return ;
for(int i=;i<;++i)
{
if(a[i]<) return ;
n-=a[i];
}
if(n!=) return ;
for(int i=;i<;++i)
for(int j=;j<=a[i];++j) printf(" %d",i);
printf("\n");
return ;
}
int main()
{
int T;
scanf("%d",&T);
for(int cas=;cas<=T;++cas)
{
printf("Case #%d:",cas);
scanf("%d",&n);
for(int i=;i<;++i) scanf("%d",&a[i]);
if(!solve())printf(" -1\n");
}
return ;
}
最新文章
- CSS3写折纸
- ASP.NET MVC中给所有的cshtml页面引用命名空间
- 2014年黑金FPGA原创教程规划发布
- [Linux] 查看系统启动时间
- 二叉树学习笔记之二叉查找树(BSTree)
- openfire插件开发入门1
- STC89c52RC 的EEPROM和AVR的EEPROM
- KMP算法_读书笔记
- JSP语法
- Android 系统自动重启Bug(高通平台)
- Microsoft Windows CVE-2017-8464 LNK 远程代码执行漏洞(复现)
- linux查看文件的后几行
- python 元类的简单解释
- php : 文件及文件夹操作(创建、删除、移动、复制)
- android 手机拍照返回 Intent==null 以及intent.getData==null
- c# 委托初用法
- 评微软收购GitHub
- 拒绝滥用golang defer机制
- Maven 高级应用
- Robotlegs2的Starling扩展