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 ...
随机推荐
- java多线程:继承Thread和实现Runable接口的区别
java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点: 首先,java只能单继承,因此 ...
- [jquery]ajax最最常用的七个属性
1.url 类型:String 默认值: 当前页地址.发送请求的地址. 2.data 类型:String 发送到服务器的数据.将自动转换为请求字符串格式.GET 请求中将附加在 URL 后.查看 pr ...
- Java 实现简单的 RPC 框架
RPC 简介 RPC,全称为 Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式,而不需要了解底层网络技术 ...
- Go part 3 指针,栈与堆
指针类型 要明白指针,需要知道几个概念:指针地址,指针类型 和 指针取值 取指针地址 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置,使用 & 放在变量前面进行“取指针地址”操 ...
- SpringBoot mysql出现The server time zone value '�й���ʱ��' is unrecogni
MySql :8.0.18 引入的mysql驱动: SpringBoot整合Mybatis的框架,在访问Controller的时候 : ava.sql.SQLException: The server ...
- 1.NoSQL入门和概述
入门概述: 1.为什么要用到NoSQL a) 单机MySQL的美好年代,在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站不多. ...
- selenium重定向新窗口
1.跳转新窗口 # 浏览器跳转新窗口后,selenium绑定新窗口 print('页面跳转后重新绑定selenium.') time.sleep(3) search_window = driver.c ...
- MySQL的数据读取过程
本文来自:http://blog.chinaunix.net/uid-20785090-id-4759476.html 对于build-in的innodb的架构,每次当发布IO请求时,究竟是mysql ...
- EtherNet/IP 协议应用层使用CIP协议&CIP协议中使用的TLS和DTLS(Network Infrastructure for EtherNet/IPTM: Introduction and Considerations)
- python使得文件不包含重复行
set函数去重 # -*- coding:utf-8 -*- srcTxt=open('1.txt','r').readlines() noRepeat=open('2.txt','w') st=se ...