分圆多项式

问题在于精度貌似出了一些奇怪的问题。。。

【输出也写的有问题QAQ】

完全不会处理了 加上全网没有题解T^T

挖个坑以后补。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define inf 20021225
#define ll long long
#define mxn 10100
#define pa pair<int,int>
#define mp make_pair
#define db long double
using namespace std; int d[mxn][mxn];int m[mxn];
bool vis[mxn];
// x -> n y -> pow template<typename T>
inline T labs( const T & x ){return x<0?-x:x;} template<typename T>
inline int sgn( const T & x ){return x<0?-1:(x?1:0);} inline int d_round( const db & x ){return (int)(sgn(x)*(labs(x)+0.50001));} const db pi=acos(-1.0);
struct complex
{
db x,y;
complex(){}
complex(db _x,db _y){x=_x,y=_y;}
};
complex tmp[mxn],fin[mxn];
complex operator +(complex a,complex b){return complex(a.x+b.x,a.y+b.y);}
complex operator -(complex a,complex b){return complex(a.x-b.x,a.y-b.y);}
complex operator *(complex a,complex b){return complex(a.x*b.x-a.y*b.y,a.x*b.y+b.x*a.y);}
int gcd(int x,int y)
{
return y==0?x:gcd(y,x%y);
}
void calc(int n)
{
if(vis[n]) return;
vis[n]=1;
for(int i=0;i<n;i++) tmp[i]=complex(0,0);
tmp[0]=complex(1,0); int c=1;
//printf("--------%d---------\n",n);
for(int i=1;i<n;i++)
{
if(gcd(i,n)!=1) continue;
//printf("%d %d\n",i,n);
db qaq=(db)i/(db)n*2.0*pi;// printf("%lf\n",qaq/pi);
for(int j=c;j;j--)
{
tmp[j] = tmp[j-1] - tmp[j] * complex(cos(qaq),sin(qaq));
//if(i<10) printf("%lf ",tmp[j]);
}
tmp[0] = complex(0,0) - tmp[0] * complex(cos(qaq),sin(qaq));
//if(i<10) printf("\n");
c++;
}
m[n]=c;
for(int i=c;~i;i--)
{
d[n][i]=d_round(tmp[i].x);
//printf("%lf ",tmp[i].x);
}
} void get(int n)
{
int f;
for(int i=1;i<=n;i++)
{
if(n%i==0)
{
calc(i);f=0;
for(int j=m[i];j>1;j--)
{
if(d[i][j])
{
if(!f) printf("("),f=1;
if(d[i][j]<-1) printf("%dx^%d",d[i][j],j);
else if(abs(d[i][j])==1)
{
if(f==1) printf("x^%d",j);
else if(d[i][j]==-1) printf("-x^%d",j);
else printf("+x^%d",j);
}
else printf("+%dx^%d",d[i][j],j);
f=2;
}
}
if(d[i][1])
{
if(!f) printf("("),f=1;
if(d[i][1]<-1) printf("%dx",d[i][1]);
else if(abs(d[i][1])==1)
{
if(f==1) printf("x");
else if(d[i][1]==-1) printf("-x");
else printf("+x");
}
else printf("+%dx",d[i][1]);
}
if(d[i][0]>0) printf("+%d)",d[i][0]);
else printf("%d)",d[i][0]);
}
}
printf("\n");
//printf("%lf\n",cos(4.0/11.0*pi)+cos(6.0/11.0*pi));
} int n;
int main()
{
vis[1]=vis[2]=1;
m[1]=m[2]=2;
d[1][1]=d[2][1]=1;
d[1][0]=-1;d[2][0]=1;
while(scanf("%d",&n)&&n)
get(n);
return 0;
}

【挖坟】HDU3205 Factorization的更多相关文章

  1. 挖坟之Spring.NET IOC容器初始化

    因查找ht项目中一个久未解决spring内部异常,翻了一段时间源码.以此文总结springIOC,容器初始化过程. 语言背景是C#.网上有一些基于java的spring源码分析文档,大而乱,乱而不全, ...

  2. 优化MySchool数据库设计之【巅峰对决】

    优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ...

  3. PHP 实现“贴吧神兽”验证码

    最早看到 “贴吧神兽” 验证码是在百度贴吧,吧主防止挖坟贴,放出了究极神兽验证码 例如: 地址:http://tieba.baidu.com/p/3320323440 可以用 PHP + JavaSc ...

  4. Java 动态代理作用是什么?

    Java 动态代理作用是什么?   1 条评论 分享   默认排序按时间排序 19 个回答 133赞同反对,不会显示你的姓名 Intopass 程序员,近期沉迷于动漫ING 133 人赞同 ① 首先你 ...

  5. [读书笔记]java中的类加载器

    以下内容大多来自周志明的<深入理解Java虚拟机>. 类加载器是java的一项创新,也是java流行的重要原因之一,它最初是为了满足java applet的需求而开发出来. 什么是appl ...

  6. SQL Server 利用锁提示优化Row_number()-程序员需知

    网站中一些老页面仍采用Row_number类似的开窗函数进行分页处理,此时如果遭遇挖坟帖的情形可能就需要漫长的等待且消耗巨大.这里给大家介绍根据Row_number()特性采用特定锁Hint提升查询速 ...

  7. Jquery几个比较实用,但又让很多人忽略的几个函数

    工作中接触的人中,这些函数的使用频率比较少,我用的又比较好用的几个函数 来给大家分享一下. 你有你喜欢的,也可以分享一下 1.filter 使用了我要什么就有什么 这个函数不但可以很方便的筛选自定义H ...

  8. 人生导师——如何学习C++的Windows方向

    原来发在百度上,今天被人挖坟挖出来了,我就再贴出来吧. -----------------------有什么说的不对的地方---------------------- 本文原创,转载请注明出处并保持文 ...

  9. Codeforces Round #342 (Div 2) 解题报告

    除夕夜之有生之年CF第一场 下午从奶奶家回到姥姥家,一看还有些时间,先吃点水果陪姥姥姥爷聊了会儿,再一看表,5:20....woc已经开场20分钟了...于是抓紧时间乱搞.. **A. Guest F ...

随机推荐

  1. Linux Crontab命令定时任务基本语法

    一.Crontab查看编辑重启 1.查看crontab定时执行任务列表 crontab -l 2.编辑crontab定时执行任务 crontab -e 3.删除crontab定时任务 crontab  ...

  2. 【HDOJ6621】K-th Closest Distance(主席树,二分)

    题意:给定一个长为n的序列,有m次强制在线的询问,每次询问位置[L,R]中abs(a[i]-p)第k小的值 n,m<=1e5,a[i]<=1e6,p<=1e6,k<=169 思 ...

  3. vue双向数据绑定对于数组和新增对象属性不能监听的解决办法

    出现数组不能按照索引进行跟新的原因是处于性能考虑的,但是整体数组的增加删除是可以监听到的:对于对象新增属性不能监听是因为没有在生成vue实例时候放进watcher收集依赖. 首先我们先来了解vue数据 ...

  4. Spring Boot学习第一部分(Spring 4.x)第一章(Spring 基础)

    1.spring概述 1.1.spring的简史 第一阶段:XML配置spring 1.x时代, 第二阶段:注解配置spring 2.x时代, @Controller @Service @Compon ...

  5. python2.7+RobotFramework的UI自动化环境搭建

    robotFramework是一种比较常见的自动化测试框架,此篇记录环境搭建 目录 1.软件准备 2.执行安装 1.软件准备 python-2.7.15.amd64.msi              ...

  6. Intent的setFlag和addFlag有什么区别?

    Intent的setFlag和addFlag有什么区别?setFlag是把之前的替换掉,addFlag是添加新的 Intent it=new Intent(); it.setClass(Setting ...

  7. PHP 调试 - 方式

    之前学 Java 的时候,一直使用 IDE 的 console 控制台进行调试.后来搞 PHP 后,习惯在代码里面 echo 和 exit,然后在浏览器刷新看效果,把单步调试.变量值查看等常用的调试方 ...

  8. Vue Cli 3:创建项目

    一 简介 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,有几个独立的部分. 1 CLI (@vue/cli) 是一个全局安装的 npm 包,提供了终端里的 vue 命令.(vue ...

  9. JS基础(上)

    JS与DOM的关系 浏览器有渲染html代码的功能,把html源码(如div,p标签等)在内存里形成一个DOM对象 文档对象模型DOM(Document Object Model)定义访问和处理HTM ...

  10. upc 组队赛18 STRENGTH【贪心模拟】

    STRENGTH 题目链接 题目描述 Strength gives you the confidence within yourself to overcome any fears, challeng ...