csps模拟84Smooth,Six,Walker题解
题面: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题解的更多相关文章
- [CSP-S模拟测试50]反思+题解
??大部分人都觉得T3是道不可做题去刚T1T2了,于是我就侥幸苟到了前面? 这场考试比较成功的就是快速水掉了T1T2的部分分,1h拿到88分起码为之后硬肝T3上了保险(赛后发现就算T3爆零也能rank ...
- [CSP-S模拟测试48]反思+题解
状态很垃圾的一场考试.感觉“这么多分就够了”的心态很是在给自己拖后腿. 打开题面,第一页赫然写着:$Claris' Contest$. 吓得我差点手一抖关掉.不过后来想想似乎强到变态的人出的题都不是很 ...
- [CSP-S模拟测试47]反思+题解
打开题面,T3似乎被换过了.(那我就更有理由直接弃掉了) T1是我最害怕的乱搞题,赶紧扔了看T2.发现是个sb板子?雨天的尾巴弱化版? 然而线段树合并早忘干净了(最近几道可以线段树合并的题都是用别的方 ...
- csps模拟测试7576一句话题解
题面:https://www.cnblogs.com/Juve/articles/11694454.html 75考了数学,化学和物理... T1: 假设有一个A和B,那么对于每一个j!=i,都有$\ ...
- csps模拟测试707172部分题解myc
题面:https://www.cnblogs.com/Juve/articles/11678524.html 骆驼:构造题,留坑 根据5×5的矩形构造成大矩形 毛一琛: mid in the midd ...
- csps模拟68d,e,f题解
题面:https://www.cnblogs.com/Juve/articles/11655531.html 三道数据结构? d: 贪心,先按a排序,然后枚举删了前i个a值比较小的,然后在剩下的里面删 ...
- csp-s模拟64trade,sum,building题解
题面:https://www.cnblogs.com/Juve/articles/11639755.html trade: 70分sbdp,然后一直想优化,dp还是很好写的 正解是反悔贪心 维护一个小 ...
- 反省——关于csp-s模拟50
本人于搜索csp-s模拟49题解时,有意识地点开了一篇关于csp-s模拟50T2的题解,并知道了题解是二维前缀和以及四维偏序. 更重要的是,那篇博客说有解法二,叫二维莫队. 于是我上网搜索二维莫队,结 ...
- csp-s模拟测试97
csp-s模拟测试97 猿型毕露.水题一眼秒,火题切不动,还是太菜了. $T1$看了一会儿感觉$woc$期望题$T1??$假的吧??. $T2$秒. $T3$什么玩意儿. 40 01:24:46 00 ...
随机推荐
- [HDU3333]Turing Tree
莫队模板题... 不过树状数组也可以做...跟HH的项链几乎一模一样,离线询问,然后记录前缀,更新的时候把前缀删掉就好了,然而这题开long long,卡空间 //hgs AK IOI,IMO,ICH ...
- 爬虫那些事儿--Http返回码
由于爬虫的抓取也是使用http协议交互.因此需要了解Http的各种返回码所代表的意义,才能判断爬虫的执行结果. 返回码如下: 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部 ...
- msql数据库基础
一.数据库操作 1.显示数据库 SHOW DATABASES; SHOW CREATE DATABASE 数据库名称; #数据库的创建信息 2.创建数据库 #utf8 CREATE DATABASE ...
- Dart编程数字Number
Dart数字可以分为: int - 任意大小的整数. int 数据类型用于表示整数. double -64位(双精度)浮点数,由IEEE 754标准规定. 在 double 数据类型用于表示小数 in ...
- bcc-tools工具之profile
profile是用于追踪程序执行调用流程的工具,类似于perf中的-g指令 相比perf -g而言,profile功能化更加细分,可以根据需要选择追踪层面,例如-U(用户要调用流程) -K (内核态调 ...
- 【历年真题】斐波那契数列logn做法
描述 [题解] 用矩阵乘法加速递推 [0 1] [1 1] [f[n-1]] [f[n-2]] = [f[n-1]] [f[n]] 求A矩阵的n-2次幂然后再乘B矩阵. 结果矩阵中的第二行第一列就是f ...
- Android中onTouch方法的执行过程以及和onClick执行发生冲突的解决办法
$*********************************************************************************************$ 博主推荐 ...
- spark在collect收集数据的时候出现outOfMemoryError:java heap space
spark的collect是action算子,所有最后会以数组的形式返回给driver端,当数据太大的时候就会出现堆内存溢出.OutofMemoryError:java heap space. 在sp ...
- Python入门 mac系统/linux系统 安装python (一)
mac 系统 在命令行里,不会用命令行就别学编程了,自行查一下怎么用吧 brew install python 如果没有brew这个命令: 在mac终端下执行 /usr/bin/ruby -e &qu ...
- python round, ceil, flooor
round(num, n) 保留n位小数 round(80.23456, 2) : 80.23 round(100.000056, 3) : 100.0 round(-100.000056, 3) : ...