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 ...
随机推荐
- javascript中的insertBefore方法
<SCRIPT LANGUAGE="JavaScript"> window.onload=function(){ var a =document.createEleme ...
- java oop第14章_Swing(Java界面设计)
一. Swing相关的概念: 1. GUI:(Graphical User Interface):图形化用户界面,通过图形化的方式提供与用户交互的平台,向用户展示信息.收集用户提交的数据. 2. ...
- ubuntu apache配置检测及重启 nginx配置检测及重启
apache 配置文件检测:sudo apachectl configtestapache 重启:sudo service apache2 restartnginx 配置文件检测:sudo nginx ...
- 2019牛客暑期多校训练营(第六场)Palindrome Mouse 回文树+dfs
题目传送门 题意:给出一个字符串,将字符串中所有的回文子串全部放入一个集合里,去重后.问这个集合里有几对<a,b>,使得a是b的子串. 思路:一开始想偏了,以为只要求每个回文串的回文后缀的 ...
- C# 记录循环消耗时间
今天写了循环段代码,但是感觉好像性能很差的样子,就想看一下整个循环的执行时间,最开始我想到了DateTime.Now,但是诡异的是,如果我循环的次数比较少的话(少于30000次)就会发现2次时间间隔是 ...
- day04 mysql单表查询 多表查询 pymysql的使用
day04 mysql pymysql 一.单表查询 1.having过滤 一般用作二次筛选 也可以用作一次筛选(残缺的: 只能筛选select里面 ...
- vue 单元素过渡
demo <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- thinkphp 域名部署
ThinkPHP支持模块(甚至可以包含控制器)的完整域名.子域名和IP部署功能,让你的模块变得更加灵活,模块绑定到域名或者IP后,URL地址中的模块名称就可以省略了,所以还可以起到简化URL的作用. ...
- thinkphp 缓存驱动
缓存驱动默认位于Think\Cache\Driver命名空间下面,目前已经提供了包括APC.Db.Memcache.Shmop.Sqlite.Redis.Eaccelerator和Xcache缓存方式 ...
- shell得到两个文件的差集
第一种方法: grep: [root@hdp05 src]# grep -vxFf leadering.txt leaderNum.txt [root@hdp05 src]# cat leaderin ...