模拟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. 开发人员需求能kill杀死其它阻塞自己的会话,测试发现需要alter system权限有风险

    模拟开发人员需求,可以杀死其它阻塞自己的会话1.能有查询阻塞会话确认的权限SQL> grant select on v_$session to testa;SQL> grant selec ...

  2. (二十七)JSP标签之核心标签

    一.诞生 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码. 二.JSTL 分类 核心标签(用得最多) ...

  3. 清北学堂-DAY2-数论专题-中国剩余定理(CRT)

    首先请看定义:(百科上抄下来的)孙子定理是中国古代求解一次同余式组(见同余)的方法.是数论中一个重要定理.又称中国余数定理. 一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作&l ...

  4. 如何在含有json类型的字段上建立多列索引

    废话不多,直接上图 如 : 表结构如图           那么我想在这三个字段上建立一个唯一索引,目的是为了防止重复插入数据, 1.首先,说明一下 data中的json中,key为 tagID 和 ...

  5. Mysql 更新时间

    Mysql时间加减函数为date_add().date_sub() 定义和用法DATE_ADD() 函数向日期添加指定的时间间隔.DATE_SUB() 函数向日期减少指定的时间间隔.语法DATE_AD ...

  6. VBA变量(七)

    变量是一个指定的内存位置,用于保存脚本执行过程中可以更改的值.以下是命名变量的基本规则. 变量名称必须使用一个字母作为第一个字符. 变量名称不能使用空格,句点(.),感叹号(!)或字符@,&, ...

  7. js对象转数组

    1.Array.from() 方法,用于数组的浅拷贝.就是将一个类数组对象或者可遍历对象转换成一个真正的数组.eg: let obj = { 0: ‘nihao‘, 1: ‘haha‘, 2: ‘ga ...

  8. 理解JVM之垃圾回收

    1.垃圾收集算法 1) 标记-清楚算法:该算法是最基础的收集算法,其分为标记与清除两个阶段.首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,该算法主要有两个不足:一个是效率问题,标 ...

  9. sql server 某一列求和

    sql server 某一列求和 SELECT 患者来源,设备类型,检查部位,设备名称,convert(char(10),STUDY_DATE,121) as 日期, count(distinct 就 ...

  10. web.py之cookie和session

    官方给的session例子这里就不讲了.下面直接将怎么设置session,取session: session相关代码一定要放在web.py框架的Main.py里面. # Main.py # 设置ses ...