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 ...
随机推荐
- HTTP信息头处理器
就是HTTP请求头-Header
- mongodb java操作常用写法
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值可以包含其他文档,数组及文档数组.下面介绍的是用java操作 ...
- pycharm破解教程
转载 查询 https://blog.csdn.net/u014044812/article/details/86679150
- leetcood学习笔记-113-路径总和 II
题目描述: 参考后的提交: class Solution(object): def pathSum(self, root, sum): """ :type root: T ...
- 针对list<object>中的对象数据的一些简单处理
一 首先创建一个实体类(PersonData ): package hello; public class PersonData { String Id; String Name; String ...
- Prometheus监控node-exporter常用指标含义
一.说明 最近使用Prometheus新搭建监控系统时候发现内存采集时centos6和centos7下内存监控指标采集计算公式不相同,最后采用统一计算方法并整理计算公式如下: 1 100-(node_ ...
- 牛客多校第九场 E All men are brothers 并查集/组合论
题意: 一开始有n人互不认识,每回合有两个人认识,认识具有传递性,也就是相互认识的人组成小团体.现在问你每个回合,挑选四个人,这四个人互不认识,有多少种挑选方法. 题解: 认识不认识用并查集维护即可, ...
- python入门 类的继承和聚合(五)
继承 class Rocket: def __init__(self, name, distance): self.name = name self.distance = distance def l ...
- Spring Boot 遇到空指针
@Autowired private IRoadRescueService roadRescueService; 千万不要把注入的service类设为static
- 10.RabbitMQ Fanout类型交换机
Fanout类型交换机忽略Routing Key,它将消息传递到所有与它绑定的队列上. Producer.java package com.test.fanout; import co ...