csps模拟73-74
模拟73:
T1:哔~~~~~~~~~~~~~~~~~~~~
sb模拟,然而一个小细节打炸了,不想解释(吐嘈大样例没有右移)。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[][],b[][],pd[][];
int n,m,x,y,z,d,k,v,r;
long long ans;
void add()
{
r=;
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)
if(!a[i][j])++r;
k=+k%r;
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)
if(!a[i][j]){--k;if(!k){a[i][j]=v;return;}}
}
inline bool work0()
{
int ok=;
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)b[i][j]=pd[i][j]=;
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)
if(a[i][j])
{
b[++b[][j]][j]=a[i][j];
if(b[][j]!=i)ok=;
}
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)a[i][j]=;
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)
if(b[i][j])
{
a[++a[][j]][j]=b[i][j];
if(a[a[][j]][j]==a[a[][j]-][j]&&!pd[a[][j]-][j])
{
a[a[][j]][j]=;
a[--a[][j]][j]<<=;
pd[a[][j]][j]=;
ans+=a[a[][j]][j];
ok=;
}
}
if(!ok)return ;
return ;
}
inline bool work1()
{
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)b[i][j]=a[n-i+][j];
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)a[i][j]=b[i][j]; if(work0())return ; for( int i=;i<=n;++i)
for( int j=;j<=n;++j)b[i][j]=a[n-i+][j];
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)a[i][j]=b[i][j];
return ;
}
inline bool work2()
{
int ok=;
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)b[i][j]=pd[i][j]=;
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)
if(a[i][j]){
b[i][++b[i][]]=a[i][j];
if(b[i][]!=j)ok=;
}
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)a[i][j]=;
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)
if(b[i][j])
{
a[i][++a[i][]]=b[i][j];
if(a[i][a[i][]]==a[i][a[i][]-]&&!pd[i][a[i][]-])
{
a[i][a[i][]]=;
a[i][--a[i][]]<<=;
pd[i][a[i][]]=;
ans+=a[i][a[i][]];
ok=;
}
}
if(!ok)return ;
return ;
}
inline bool work3()
{
int ok=;
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)b[i][j]=a[i][n-j+];
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)a[i][j]=b[i][j]; if(work2())return ; for( int i=;i<=n;++i)
for( int j=;j<=n;++j)b[i][j]=a[i][n-j+];
for( int i=;i<=n;++i)
for( int j=;j<=n;++j)a[i][j]=b[i][j];
return ;
}
void pr()
{
puts("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
for(int i=;i<=n;puts(""),++i)
for(int j=;j<=n;++j)printf("%4d",a[i][j]);
puts("");
}
int main()
{
srand(time());
scanf("%d",&n);
x=rand()%n+;y=rand()%n+;
a[x][y]=;
while()
{
pr();k=rand()%+;v=;
char c=getchar();
while(c!='w'&&c!='a'&&c!='s'&&c!='d')c=getchar();
switch(c)
{
case 'w':{
if(work0()){
puts("Skyh have aked IOI");
return ;
}
add();
break;
}
case 's':{
if(work1()){
puts("Skyh have aked IOI");
return ;
}
add();
break;
}
case 'a':{
if(work2()){
puts("Skyh have aked IOI");
return ;
}
add();
break;
}
case 'd':{
if(work3()){
puts("Skyh have aked IOI");
return ;
}
add();
break;
}
}
}
return ;
}
2048
T2:结论题,dp,数据结构优化,秒切
//反正法证明段数不会大于2。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define N 100050
using namespace std;
int n;
ll ct[N],f[N],dp[N],ans;
int lsh[N],ls,a[N];
void init()
{
sort(lsh+,lsh+n+);
ls=unique(lsh+,lsh+n+)-lsh-;
for(int i=;i<=n;++i)
a[i]=lower_bound(lsh+,lsh+ls+,a[i])-lsh;
}
inline int add(int x,long long v)
{
while(x<=n)
{
ct[x]=max(ct[x],v);
x+=x&-x;
}
}
inline ll ask(int x)
{
ll ret=;
while(x)
{
if(ct[x]>ret)ret=ct[x];
x-=x&-x;
}
return ret;
}
int main()
{
scanf("%d",&n);
for(register int i=;i<=n;++i)
{
scanf("%d",&a[i]);
lsh[++ls]=a[i];
}
init();
for(register int i=;i<=n;++i)
{
f[i]=ask(a[i]-)+lsh[a[i]];
add(a[i],f[i]);
if(f[i-]>f[i])f[i]=f[i-];
}
for(register int i=;i<=n;++i)ct[i]=;
for(register int i=n;i;--i)
{
dp[i]=ask(a[i]-)+lsh[a[i]];add(a[i],dp[i]);
if(dp[i+]>dp[i])dp[i]=dp[i+];
}
for(register int i=;i<=n;++i)
{
ans=max(ans,f[i]+max(f[i],dp[i+]));
}
double t=0.5*ans;
printf("%.3lf\n",t);
return ;
}
T3:神题,对高考数学涉及较多,主要考察三角函数应用。暴力枚举弧度数即可A掉(数据较水,莫要吐嘈细节)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#define N 55
using namespace std;
const int inf=;
int n,m,fa[N];
struct node{
int x,y;
double a,b;
double val,z,ta,ct,si,co;
inline void init()
{
z=sqrt(1.0*a*a+1.0*b*b);
ta=1.0*b/a;ct=1.0*a/b;
si=1.0*b/z;co=1.0*a/z;
}
friend bool operator < (const node &c,const node &d){return c.val<d.val;}
}q[],t;
double ans;
int getfa(int x)
{
if(fa[x]==x)return x;
return fa[x]=getfa(fa[x]);
}
int main()
{
srand(time());
scanf("%d%d",&n,&m);int ok=;
for(int i=;i<=m;++i)
scanf("%d%d%lf%lf",&q[i].x,&q[i].y,&q[i].a,&q[i].b),q[i].init();
random_shuffle(q+,q+m+);
double a,b;
for(double i=;i<=;i+=0.7)
{
a=b=0.0;
t.z=1000.0;t.a=t.z*cos(i);t.b=t.z*sin(i);
t.init();
for(int j=;j<=m;++j)
q[j].val=q[j].z*(t.co*q[j].co+t.si*q[j].si);
for(int j=;j<=n;++j)fa[j]=j;
sort(q+,q+m+);
for(int j=;j<=m;++j)
{
if(getfa(q[j].x)==getfa(q[j].y))continue;
fa[getfa(q[j].x)]=getfa(q[j].y);
a+=q[j].a;b+=q[j].b;
}
ans=max(ans,sqrt(1ll*a*a+1ll*b*b));
}
printf("%.6lf\n",ans);
}
正解skyh说挺简单的不用解释。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<queue>
#define N 55
using namespace std;
const int inf=;
int n,m,fa[N];
struct node{
int x,y;
double a,b;
double val,z,ta,ct,si,co;
inline void init()
{
z=sqrt(1.0*a*a+1.0*b*b);
ta=1.0*b/a;ct=1.0*a/b;
si=1.0*b/z;co=1.0*a/z;
}
friend bool operator < (const node &c,const node &d){return c.val<d.val;}
}q[],t;
double ans;
int getfa(int x)
{
if(fa[x]==x)return x;
return fa[x]=getfa(fa[x]);
}
inline double Gauss(double x,double y,double xx,double yy)
{
double k,b;
b=yy-y*(xx/x);
b*=x/xx;
k=(y-b)/x;
return k;
}
queue<double>qq;
void work1()
{
double a,b;
for(double i=;i<=;i+=0.7)
{
a=b=0.0;
t.z=1000.0;t.a=t.z*cos(i);t.b=t.z*sin(i);
t.init();
for(int j=;j<=m;++j)
q[j].val=q[j].z*(t.co*q[j].co+t.si*q[j].si);
for(int j=;j<=n;++j)fa[j]=j;
sort(q+,q+m+);
for(int j=;j<=m;++j)
{
if(getfa(q[j].x)==getfa(q[j].y))continue;
fa[getfa(q[j].x)]=getfa(q[j].y);
a+=q[j].a;b+=q[j].b;
}
ans=max(ans,sqrt(1ll*a*a+1ll*b*b));
}
printf("%.6lf\n",ans);
}
int main()
{
srand(time());
scanf("%d%d",&n,&m);int ok=;
for(int i=;i<=m;++i)
{scanf("%d%d%lf%lf",&q[i].x,&q[i].y,&q[i].a,&q[i].b),q[i].init();if(q[i].b)ok=;}
double a,b,tt;
if(ok){work1();return ;}
for(int i=;i<=m;++i)
{
for(int j=;j<=m;++j)
{
if(j==i||q[i].b==q[j].b)continue;
tt=Gauss(q[i].a,q[i].b,q[j].a,q[j].b);
tt=-1.0/tt;
qq.push(tt);
}
}
while(!qq.empty())
{
a=b=0.0;t.a=1.0;t.b=t.a*(qq.front()+1e-);
t.init();
for(int j=;j<=m;++j)
q[j].val=q[j].z*(t.co*q[j].co+t.si*q[j].si);
for(int j=;j<=n;++j)fa[j]=j;
sort(q+,q+m+);
for(int j=;j<=m;++j)
{
if(getfa(q[j].x)==getfa(q[j].y))continue;
fa[getfa(q[j].x)]=getfa(q[j].y);
a+=q[j].a;b+=q[j].b;
}
ans=max(ans,sqrt(1ll*a*a+1ll*b*b));
a=b=0.0;t.a=-1.0;t.b=t.a*(qq.front()+1e-);qq.pop();
t.init();
for(int j=;j<=m;++j)
q[j].val=q[j].z*(t.co*q[j].co+t.si*q[j].si);
for(int j=;j<=n;++j)fa[j]=j;
sort(q+,q+m+);
for(int j=;j<=m;++j)
{
if(getfa(q[j].x)==getfa(q[j].y))continue;
fa[getfa(q[j].x)]=getfa(q[j].y);
a+=q[j].a;b+=q[j].b;
}
ans=max(ans,sqrt(1ll*a*a+1ll*b*b));
}
printf("%.6lf\n",ans);
}
正解
其实还可以,不太恶心
模拟74:
(这里用来写脏话)
T1&T3:水题。。。
T2:神题
时间分配:T1+T3=1h,T2=2.5h
得分分布:T1+T3=200pts,T2=30pts
T2:发现玩具构成一棵树,求树高的期望。
比较难想的其实是把新加入的点当作根节点,而不是接到其他节点之后
题解:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define N 250
using namespace std;
inline int read()
{
char c=getchar();int s=;
while(c>''||c<'')c=getchar();
while(c>=''&&c<='')s=s*+c-'',c=getchar();
return s;
}
int n=read();
const int mod=read();
int ans;
inline int qpow(int d,int z)
{
int ret=;
for(;z;z>>=,d=1ll*d*d%mod)
if(z&)ret=1ll*ret*d%mod;
return ret;
}
int inv[N];
int alv;
int dp[N][N];
int f[N][N];
int g[N][N];
int main()
{
inv[]=;
for(int i=;i<=n;++i)inv[i]=qpow(i,mod-);
alv=;
for(int i=;i<n;++i)alv=1ll*alv*inv[i]%mod;
dp[][]=;
for(int i=;i<=n;++i){
for(int j=;j<=i;++j){
dp[i][j]=1ll*inv[i]*(1ll*dp[i-][j-]*(j-)%mod+1ll*dp[i-][j]*(i-j)%mod)%mod;
if(dp[i][j]>=mod)dp[i][j]-=mod;
}
}
for(int i=;i<=n;++i)g[][i]=f[][i]=g[][i]=;
for(int i=;i<=n;++i){
for(int j=;j<n;++j){f[i][j]=g[i-][j-];}
for(int j=;j<n;++j){
for(int k=;k<=i;++k){
g[i][j]+=1ll*g[i-k][j]*f[k][j]%mod*dp[i][k]%mod;
if(g[i][j]>=mod)g[i][j]-=mod;
}
}
}
for(int i=;i<n;++i)
{
ans+=1ll*(f[n][i]-f[n][i-])*i%mod;
if(ans>=mod)ans-=mod;
if(ans<)ans+=mod;
}
cout<<ans<<endl;
return ;
}
发现题解中给的dp数组dp[i][j]=inv[i];证明好像可以用数学归纳法。
csps模拟73-74的更多相关文章
- CSPS模拟 73
被T3坑了 忘记考虑$atan$只会返回正数导致无法区分方向相反模长相等的两个向量 直接把向量拆成ab两个上三角函数干出来就对了 真的exhausted
- [CSP-S模拟测试74]题解
A.梦境 如果不用去重一定要用Multiset……挂30分算是出题人手下留情了. 贪心.把点排序,区间按右端点递增排序.依次考虑每个区间,取能选的最靠左的点即可.multiset维护. #includ ...
- csps模拟测试74梦境,玩具,飘雪圣域题解
题面:https://www.cnblogs.com/Juve/articles/11679226.html 梦境: 其实还是挺水的,排序错了过不了样例,打了个二分图匹配就跑了 #include< ...
- csp-s模拟测试52-53
留坑.... 改完题再说吧. 留坑....最近考得什么鬼??模拟53T1 u(差分) 一道差分题????然而考场没有想到如何维护斜率上的差分,事后经miemeng和cyf的生(xuan)动(xue)讲 ...
- 反省——关于csp-s模拟50
本人于搜索csp-s模拟49题解时,有意识地点开了一篇关于csp-s模拟50T2的题解,并知道了题解是二维前缀和以及四维偏序. 更重要的是,那篇博客说有解法二,叫二维莫队. 于是我上网搜索二维莫队,结 ...
- csp-s模拟测试99
csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...
- csp-s模拟测试98
csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...
- csp-s模拟测试97
csp-s模拟测试97 猿型毕露.水题一眼秒,火题切不动,还是太菜了. $T1$看了一会儿感觉$woc$期望题$T1??$假的吧??. $T2$秒. $T3$什么玩意儿. 40 01:24:46 00 ...
- csp-s模拟测试96
csp-s模拟测试96 $T1$一眼慢速乘,$T2$稍证一手最优性尝试用神奇数据结构优化,无果,弃.$T3$暴力+信仰. 100 03:16:38 95 03:16:56 35 03:17:10 23 ...
随机推荐
- ajax post上传数据时,前端出现的跨域权限问题:ccess to XMLHttpRequest at ‘’rom origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok st
本人前端使用多个框架时,jq ajax传参出现如下报错: 最后发现,可能是xhr的相关默认参数被修改了.顾使用jq 传参时,一直报错,jq ajax额外添加的关键参数: crossDomain: ...
- MySQL5.7主从从配置
主从从,也称为级联主从,数据流向:A(主)->B(从)->C(从从),主从从级联复制. 应用场景 在主从配置的基础上,再增加一个从库,进一步提高数据安全,容灾备份. 读写分离,从库只用于查 ...
- MyEclipse j2ee工程 WEB-INF 目录内容显示
公司项目,使用的ant打包技术,,,蛋疼刚开始以为每次改个java代码都要ant 构建编译一把3-4分钟,很没有效率,, 然后实际使用中发下,可以用 auto building 和tomcat 的re ...
- DSO missing from command line
最近项目正经历着一次更新,一系列编译工具都进行了大版本的升级,随时而来的是,原本正常编译的代码出现了大量的warning,最终编译失败,其 中一个问题困扰了比较长的时间,虽然fix的方法不难,但是一直 ...
- springboot2.0介绍1
SpringBoot 一. Spring介绍 1.1.SpringBoot简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得 ...
- C# 控制台日历 region分区编写思想
已知道1900-1-1为星期一. 模块分区 //获取用户的正确输入并分别保存到变量year和month中 //声明一个用于保存空白和当月日期数的集合dates //遍历输出集合dates using ...
- leetcode-111. 二叉树最小深度 · Tree + 递归
题面 找出二叉树的最小深度(从根节点到某个叶子节点路径上的节点个数最小). 算法 算法参照二叉树的最大深度,这里需要注意的是当某节点的左右孩子都存在时,就返回左右子树的最小深度:如果不都存在,就需要返 ...
- 1.关于OSI七层模型和两主机传输过程
先回顾一下OSI七层模型有啥内容 (OSI模型与TCP/IP模型类似,这里只针对OSI模型展开) OSI参考模型为什么弃用呢?它的分层过于细致了,以至于使网络的体系结构变得复杂臃肿,有使用重叠的嫌疑, ...
- springmvc,hibernate整合时候出现Cannot load JDBC driver class 'com.mysql.jdbc.Driver
原因:不清楚是什么原因,哪位知道可以给我留言,不胜感激! 解决方法: 1.把mysql的驱动包放到你项目的WEB-INF目录下的lib目录中2.要mysql的驱动包放在tomcat/lib目录下
- 网络OSI 7层模型
OSI 的英文全程为Open Systems Interconnection ,中文全程为开放系统互联参考模型.是一个逻辑上的定义.主要用途使通信和计算系统自由互联,而不依赖其他架构或技.主要目标就是 ...