模拟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的更多相关文章

  1. CSPS模拟 73

    被T3坑了 忘记考虑$atan$只会返回正数导致无法区分方向相反模长相等的两个向量 直接把向量拆成ab两个上三角函数干出来就对了 真的exhausted

  2. [CSP-S模拟测试74]题解

    A.梦境 如果不用去重一定要用Multiset……挂30分算是出题人手下留情了. 贪心.把点排序,区间按右端点递增排序.依次考虑每个区间,取能选的最靠左的点即可.multiset维护. #includ ...

  3. csps模拟测试74梦境,玩具,飘雪圣域题解

    题面:https://www.cnblogs.com/Juve/articles/11679226.html 梦境: 其实还是挺水的,排序错了过不了样例,打了个二分图匹配就跑了 #include< ...

  4. csp-s模拟测试52-53

    留坑.... 改完题再说吧. 留坑....最近考得什么鬼??模拟53T1 u(差分) 一道差分题????然而考场没有想到如何维护斜率上的差分,事后经miemeng和cyf的生(xuan)动(xue)讲 ...

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

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

  6. csp-s模拟测试99

    csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...

  7. csp-s模拟测试98

    csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...

  8. csp-s模拟测试97

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

  9. csp-s模拟测试96

    csp-s模拟测试96 $T1$一眼慢速乘,$T2$稍证一手最优性尝试用神奇数据结构优化,无果,弃.$T3$暴力+信仰. 100 03:16:38 95 03:16:56 35 03:17:10 23 ...

随机推荐

  1. 使用vue-cli创建vue工程

    在Windows环境下,打开命令行窗口,跳转至想创建工程的路径. 如:D:\MyWork\22_Github\rexel-cn\rexel-jarvis 创建vue工程,命令:vue create r ...

  2. Mybatis分页的方式以及实现

    方式 分页的分类: 1.物理分页:只从数据库中查询当前页的数据 优点:不占用很多内存   缺点:效率比价低(相比于逻辑分页) 2.逻辑分页:从数据库将所有记录查询出来,存储到内存中,展示当前页,然后数 ...

  3. JavaScript检测浏览器

    Detect Browser <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  4. Python考试_第一次

    python基础数据类型考试题 考试时间:两个半小时 满分100分(80分以上包含80分及格) 一,基础题. 1. 简述变量命名规范(3分) 答:(1) 变量为数字,字母以及下划线的任意组合,且不能以 ...

  5. KVM之配置桥接网卡

    配置桥接网卡 添加桥接网卡br0,注释掉已有的eth0配置 [root@ubuntu01 ~]# vi /etc/network/interfaces # This file describes th ...

  6. 深度学习之卷积神经网络CNN及tensorflow代码实例

    深度学习之卷积神经网络CNN及tensorflow代码实例 什么是卷积? 卷积的定义 从数学上讲,卷积就是一种运算,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分.级数,所以看起来觉得很复杂 ...

  7. inotify和rsync实现数据实时同步

    数据的实时同步 实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上 实现实时同步的方法 ino ...

  8. 7.Vue实例的生命周期

    1.Vue实例的生命周期: 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子 = 生命周期函数 = 生命周期事件 2. 主要的生命 ...

  9. python基础应用---格式化输出

    python的格式化输出,原来不是很理解,现在有点了解了,为此特意写一个博客来记录一下,以便自己会忘记了,随时查看, 程序主体 #格式化输出之一 name = input("pls inpu ...

  10. YOLO---近段时间的练习目标

    YOLO---近段时间的练习目标 yolo(darknet)官方主页:https://pjreddie.com/darknet/yolo/   和在学校时用的不太一样了,有更新了- 还有一个常用版本: ...