【挖坟】HDU3205 Factorization
分圆多项式
问题在于精度貌似出了一些奇怪的问题。。。
【输出也写的有问题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的更多相关文章
- 挖坟之Spring.NET IOC容器初始化
因查找ht项目中一个久未解决spring内部异常,翻了一段时间源码.以此文总结springIOC,容器初始化过程. 语言背景是C#.网上有一些基于java的spring源码分析文档,大而乱,乱而不全, ...
- 优化MySchool数据库设计之【巅峰对决】
优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ...
- PHP 实现“贴吧神兽”验证码
最早看到 “贴吧神兽” 验证码是在百度贴吧,吧主防止挖坟贴,放出了究极神兽验证码 例如: 地址:http://tieba.baidu.com/p/3320323440 可以用 PHP + JavaSc ...
- Java 动态代理作用是什么?
Java 动态代理作用是什么? 1 条评论 分享 默认排序按时间排序 19 个回答 133赞同反对,不会显示你的姓名 Intopass 程序员,近期沉迷于动漫ING 133 人赞同 ① 首先你 ...
- [读书笔记]java中的类加载器
以下内容大多来自周志明的<深入理解Java虚拟机>. 类加载器是java的一项创新,也是java流行的重要原因之一,它最初是为了满足java applet的需求而开发出来. 什么是appl ...
- SQL Server 利用锁提示优化Row_number()-程序员需知
网站中一些老页面仍采用Row_number类似的开窗函数进行分页处理,此时如果遭遇挖坟帖的情形可能就需要漫长的等待且消耗巨大.这里给大家介绍根据Row_number()特性采用特定锁Hint提升查询速 ...
- Jquery几个比较实用,但又让很多人忽略的几个函数
工作中接触的人中,这些函数的使用频率比较少,我用的又比较好用的几个函数 来给大家分享一下. 你有你喜欢的,也可以分享一下 1.filter 使用了我要什么就有什么 这个函数不但可以很方便的筛选自定义H ...
- 人生导师——如何学习C++的Windows方向
原来发在百度上,今天被人挖坟挖出来了,我就再贴出来吧. -----------------------有什么说的不对的地方---------------------- 本文原创,转载请注明出处并保持文 ...
- Codeforces Round #342 (Div 2) 解题报告
除夕夜之有生之年CF第一场 下午从奶奶家回到姥姥家,一看还有些时间,先吃点水果陪姥姥姥爷聊了会儿,再一看表,5:20....woc已经开场20分钟了...于是抓紧时间乱搞.. **A. Guest F ...
随机推荐
- Linux Crontab命令定时任务基本语法
一.Crontab查看编辑重启 1.查看crontab定时执行任务列表 crontab -l 2.编辑crontab定时执行任务 crontab -e 3.删除crontab定时任务 crontab ...
- 【HDOJ6621】K-th Closest Distance(主席树,二分)
题意:给定一个长为n的序列,有m次强制在线的询问,每次询问位置[L,R]中abs(a[i]-p)第k小的值 n,m<=1e5,a[i]<=1e6,p<=1e6,k<=169 思 ...
- vue双向数据绑定对于数组和新增对象属性不能监听的解决办法
出现数组不能按照索引进行跟新的原因是处于性能考虑的,但是整体数组的增加删除是可以监听到的:对于对象新增属性不能监听是因为没有在生成vue实例时候放进watcher收集依赖. 首先我们先来了解vue数据 ...
- Spring Boot学习第一部分(Spring 4.x)第一章(Spring 基础)
1.spring概述 1.1.spring的简史 第一阶段:XML配置spring 1.x时代, 第二阶段:注解配置spring 2.x时代, @Controller @Service @Compon ...
- python2.7+RobotFramework的UI自动化环境搭建
robotFramework是一种比较常见的自动化测试框架,此篇记录环境搭建 目录 1.软件准备 2.执行安装 1.软件准备 python-2.7.15.amd64.msi ...
- Intent的setFlag和addFlag有什么区别?
Intent的setFlag和addFlag有什么区别?setFlag是把之前的替换掉,addFlag是添加新的 Intent it=new Intent(); it.setClass(Setting ...
- PHP 调试 - 方式
之前学 Java 的时候,一直使用 IDE 的 console 控制台进行调试.后来搞 PHP 后,习惯在代码里面 echo 和 exit,然后在浏览器刷新看效果,把单步调试.变量值查看等常用的调试方 ...
- Vue Cli 3:创建项目
一 简介 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,有几个独立的部分. 1 CLI (@vue/cli) 是一个全局安装的 npm 包,提供了终端里的 vue 命令.(vue ...
- JS基础(上)
JS与DOM的关系 浏览器有渲染html代码的功能,把html源码(如div,p标签等)在内存里形成一个DOM对象 文档对象模型DOM(Document Object Model)定义访问和处理HTM ...
- upc 组队赛18 STRENGTH【贪心模拟】
STRENGTH 题目链接 题目描述 Strength gives you the confidence within yourself to overcome any fears, challeng ...