题面:https://www.cnblogs.com/Juve/articles/11733280.html

smooth:

暴力强筛到7e7有60分。。。

正解:

维护一个队列,存所有的B-光滑数,维护B个指针,

因为所有的B-光滑数都有1,所以队列中先插1,所有指针只向1的位置

然后扫描B个指针,找出指针指向元素乘上对应质数的最小值更新队列

以B=4为例,最初所有指针只向1,然后扫描指针发现2×1最小,把2放入队列,1指针只向2

下一次扫描所有指针的结果为:4,3,5,7,其中3最小,3入队,2指针只向2

下一次:4,6,5,7,其中5最小,5入队,3指针(5的指针)指向2

在一次:4,6,10,7,其中4如队,1指针指向3

然后下一次发现是6,6,10,7,有两个相同的6,为了去重,1,2指针都要后移

然后模拟这个过程即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<deque>
#define int long long
using namespace std;
const int MAXN=1e7+5;
int b,k,sm[MAXN],p[17];
int prime[17]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
deque<int>q;
signed main(){
scanf("%lld%lld",&b,&k);
q.push_front(0),q.push_back(1);
for(int i=1;i<=b;++i) p[i]=1;
for(int i=2;i<=k;++i){
int minn=1e18;
for(int j=1;j<=b;++j){
if(q[p[j]]*prime[j]==q[i-1]) ++p[j];
minn=min(minn,q[p[j]]*prime[j]);
}
q.push_back(minn);
}
printf("%lld\n",q.back());
return 0;
}

six:

刚听完,还没打

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#define int long long
#define re register
using namespace std;
const int mod=1e9+;
int n,num=,d[],ans=,ys[];
int sta[],top=;
int t[],cnt[<<];
void divi(re int n){
re int nn=n;
int p=sqrt(n);
for(re int i=;i<=p;++i){
if(!(nn%i)){
d[++d[]]=i;
t[d[]]=<<(d[]-);
while(!(nn%i)) nn/=i;
}
}
if(nn>){
d[++d[]]=nn;
t[d[]]=<<(d[]-);
}
ys[++ys[]]=n;
for(re int i=;i*i<=n;++i){
if(!(n%i)){
ys[++ys[]]=i;
if(n/i!=i) ys[++ys[]]=n/i;
}
}
for(re int i=;i<=ys[];++i){
re int res=;
for(re int j=;j<=d[];++j)
if(ys[i]%d[j]==) res|=t[j];
++cnt[res];
}
}
int zt[][],f[<<];
void prework(){
re int num=;
for(re int i=;i<=;++i){
for(re int j=i;j<=;++j){
zt[i][j]=zt[j][i]=<<num;
++num;
}
}
top=;
for(re int i=;i<(<<d[]);++i){
re int res=i;
top=;
for(re int j=;j<=d[];++j){
if(i&t[j]) sta[++top]=j;
}
for(re int j=;j<=top;++j){
for(re int k=j;k<=top;++k){
f[i]|=zt[sta[j]][sta[k]];
}
}
}
}
map<pair<int,int>,int>mp;
int dfs(int fi,int se){
pair<int,int>p=make_pair(fi,se);
if(mp[p]) return mp[p];
for(int i=;i<(<<d[]);++i){
if(f[i]&p.second) continue;
int res=p.second;
for(int j=;j<=d[];++j){
if(!(i&t[j])) continue;
for(int k=;k<=d[];++k){
if(!(p.first&t[k])) continue;
res|=zt[j][k];
}
}
mp[p]=(mp[p]+cnt[i]*(dfs(p.first|i,res)+)%mod)%mod;
}
return mp[p];
}
signed main(){
scanf("%lld",&n);
divi(n);prework();//exit(0);
printf("%lld\n",dfs(,));
return ;
}

walker:

把坐标等式写出来就是:

$scale*cos\theta*px-scale*sin\theta*py+dx=nx$

$scale*sin\theta*px+scale*cos\theta*py+dy=ny$

把$scale*sin\theta$和$scale*cos\theta$,dx,dy看成四个变量,随机化枚举两组点进行高斯消元,解出4个未知数

因为$sin\theta^2+cos\theta^2=1$,所以我们可以再解出scale和$\theta$

然后带回验证是否满足$\frac{n}{2}$组解

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN=1e5+;
int n;
double nx[MAXN],ny[MAXN],px[MAXN],py[MAXN];
double a[][];
void gauss(int n){
for(int i=;i<=n;i++){
int p=i;
for(int j=i+;j<=n;j++)
if(fabs(a[j][i])>fabs(a[p][i])) p=j;
for(int j=;j<=n+;j++)
swap(a[p][j],a[i][j]);
if(fabs(a[i][i])<1e-)continue;
double tmp=a[i][i];
for(int j=;j<=n+;j++)
a[i][j]/=tmp;
for(int j=;j<=n;j++)
if(i!=j){
double tmp=a[j][i];
for(int k=;k<=n+;k++)a[j][k]-=a[i][k]*tmp;
}
}
for(int i=n;i;--i)
for(int j=i-;j;--j)
a[j][n+]-=a[i][n+]*a[j][i]/a[i][i];
for(int i=n;i;--i)
a[i][n+]/=a[i][i];
}
void make(int p1,int p2){
a[][]=px[p1],a[][]=-py[p1],a[][]=1.0,a[][]=0.0,a[][]=nx[p1],
a[][]=py[p1],a[][]=px[p1],a[][]=0.0,a[][]=1.0,a[][]=ny[p1],
a[][]=px[p2],a[][]=-py[p2],a[][]=1.0,a[][]=0.0,a[][]=nx[p2],
a[][]=py[p2],a[][]=px[p2],a[][]=0.0,a[][]=1.0,a[][]=ny[p2];
}
signed main(){
scanf("%d",&n);
srand(time());
for(int i=;i<=n;++i) scanf("%lf%lf%lf%lf",&px[i],&py[i],&nx[i],&ny[i]);
while(){
int p1=rand()%n+,p2=rand()%n+,num=;
while(p1==p2) p2=rand()%n+;
make(p1,p2),gauss();
double scale=sqrt(a[][]*a[][]+a[][]*a[][]);
if(scale>||scale<) continue;
double co=a[][]/scale,si=a[][]/scale;
double ta=si/co;
double theta=atan(ta);
if(fabs(sin(theta)-si)>1e-) theta+=3.141592653589;
if(theta<-1e-) theta+=3.141592653589*;
double dx=a[][],dy=a[][];
for(int i=;i<=n;++i){
if(fabs(scale*co*px[i]-scale*si*py[i]+dx-nx[i])<1e-&&fabs(scale*si*px[i]+scale*co*py[i]+dy-ny[i])<1e-){
++num;
if(num>=(n+)/){
printf("%0.7lf\n%0.7lf\n%0.7lf %0.7lf\n",theta,scale,dx,dy);
return ;
}
}
}
}
return ;
}

csps模拟84Smooth,Six,Walker题解的更多相关文章

  1. [CSP-S模拟测试50]反思+题解

    ??大部分人都觉得T3是道不可做题去刚T1T2了,于是我就侥幸苟到了前面? 这场考试比较成功的就是快速水掉了T1T2的部分分,1h拿到88分起码为之后硬肝T3上了保险(赛后发现就算T3爆零也能rank ...

  2. [CSP-S模拟测试48]反思+题解

    状态很垃圾的一场考试.感觉“这么多分就够了”的心态很是在给自己拖后腿. 打开题面,第一页赫然写着:$Claris' Contest$. 吓得我差点手一抖关掉.不过后来想想似乎强到变态的人出的题都不是很 ...

  3. [CSP-S模拟测试47]反思+题解

    打开题面,T3似乎被换过了.(那我就更有理由直接弃掉了) T1是我最害怕的乱搞题,赶紧扔了看T2.发现是个sb板子?雨天的尾巴弱化版? 然而线段树合并早忘干净了(最近几道可以线段树合并的题都是用别的方 ...

  4. csps模拟测试7576一句话题解

    题面:https://www.cnblogs.com/Juve/articles/11694454.html 75考了数学,化学和物理... T1: 假设有一个A和B,那么对于每一个j!=i,都有$\ ...

  5. csps模拟测试707172部分题解myc

    题面:https://www.cnblogs.com/Juve/articles/11678524.html 骆驼:构造题,留坑 根据5×5的矩形构造成大矩形 毛一琛: mid in the midd ...

  6. csps模拟68d,e,f题解

    题面:https://www.cnblogs.com/Juve/articles/11655531.html 三道数据结构? d: 贪心,先按a排序,然后枚举删了前i个a值比较小的,然后在剩下的里面删 ...

  7. csp-s模拟64trade,sum,building题解

    题面:https://www.cnblogs.com/Juve/articles/11639755.html trade: 70分sbdp,然后一直想优化,dp还是很好写的 正解是反悔贪心 维护一个小 ...

  8. 反省——关于csp-s模拟50

    本人于搜索csp-s模拟49题解时,有意识地点开了一篇关于csp-s模拟50T2的题解,并知道了题解是二维前缀和以及四维偏序. 更重要的是,那篇博客说有解法二,叫二维莫队. 于是我上网搜索二维莫队,结 ...

  9. csp-s模拟测试97

    csp-s模拟测试97 猿型毕露.水题一眼秒,火题切不动,还是太菜了. $T1$看了一会儿感觉$woc$期望题$T1??$假的吧??. $T2$秒. $T3$什么玩意儿. 40 01:24:46 00 ...

随机推荐

  1. 微信小程序のwxs

    WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构. wxs可以说就是为了满足能在页面中使用js存在的,在wxml页面中,只能在插值{{ }}中写简单的j ...

  2. xinetd - 扩展的互联网服务守护进程

    总览 SYNOPSIS xinetd [options] 描述 DESCRIPTION xinetd 执行与 inetd 相同的任务:它启动提供互联网服务的程序.与在系统初始化时启动这些服务器,让它们 ...

  3. Centos Apache 80 代理Tomcat 8080端口

    运行环境:Centos 6.5 Apache: 2.2.5 开启apache proxy的相应模块 编辑 /etc/httpd/conf/httpd.conf文件 sudo vim /etc/http ...

  4. loj2000[SDOI2017]数字表格

    题意:f为Fibnacci数列.求$\prod_{1<=i<=n,1<=j<=m} f[gcd(i,j)]$. n,m<=1e6. 标程: #include<bit ...

  5. Go 转义字符

    Go 转义字符 package main import "fmt" func main() { fmt.Printf("Hello\tWorld!") } 本文 ...

  6. CF838C(博弈+FWT子集卷积+多项式ln、exp)

    传送门: http://codeforces.com/problemset/problem/838/C 题解: 如果一个字符串的排列数是偶数,则先手必胜,因为如果下一层有后手必赢态,直接转移过去,不然 ...

  7. thinkphp 动态配置

    之前的方式都是通过预先定义配置文件的方式,而在具体的操作方法里面,我们仍然可以对某些参数进行动态配置(或者增加新的配置),主要是指那些还没有被使用的参数. 设置新的值: C('参数名称','新的参数值 ...

  8. cdq分治·三维偏序问题

    转载自FlashHu大佬的博客CDQ分治总结(CDQ,树状数组,归并排序),在讲述部分有部分删改,用了自己的代码 CDQ分治的思想 CDQ分治是基于时间的离线分治算法.这一类分治有一个重要的思想——用 ...

  9. Python中的动态类

    Python中的动态类 有这样一个需求,我有SegmentReader.PostagReader.ConllReader这三个Reader,他们都继承于一个Reader类.在程序运行中,由用户通过se ...

  10. 尾插法-实现链表反转(有点bug,以后再来研究下)

    def func2(head): p = head.next while p.next: q = p.next p.next = q.next # 重点 head.next = q q.next = ...