题面:https://www.cnblogs.com/Juve/articles/11694454.html

75考了数学,化学和物理。。。

T1:

假设有一个A和B,那么对于每一个j!=i,都有$\frac{A}{a_i}+\frac{B}{b_i}<=\frac{A}{a_j}+\frac{B}{b_j}$

化一下式子,会卡出$\frac{A}{B}$的一个范围,判断范围是否有解即可

然后你n方了,75分

正解凸包?

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define re register
using namespace std;
const int MAXN=3e5+;
int n,maxb,sta[MAXN],top=;
bool vis[MAXN];
struct node{
int a,b,id;
friend bool operator < (node p,node q){
return p.a==q.a?p.b>q.b:p.a>q.a;
}
}c[MAXN];
inline double k(re node a,re node b){
return (double)a.a*b.a*(b.b-a.b)/a.b/b.b/(b.a-a.a);
}
signed main(){
//freopen("slay4.in","r",stdin);
scanf("%lld",&n);
for(re int i=;i<=n;++i){
scanf("%lld%lld",&c[i].a,&c[i].b);
c[i].id=i;
}
sort(c+,c+n+);
sta[++top]=;maxb=c[].b;
for(int i=;i<=n;i++){
if(c[i].b<=maxb) vis[i]=;
else maxb=c[i].b;
}
for(int i=;i<=n;i++){
if(vis[i]) continue;
if(k(c[i],c[sta[top]])>) continue;
while(top>&&k(c[i],c[sta[top]])<k(c[sta[top-]],c[sta[top]]))
--top;
sta[++top]=i;
}
memset(vis,,sizeof(vis));
for(int i=;i<=top;i++){
vis[c[sta[i]].id]=;
for(int j=sta[i]+;j<=n;++j){
if(c[sta[i]].a!=c[j].a||c[sta[i]].b!=c[j].b) break;
vis[c[j].id]=;
}
}
for(re int i=;i<=n;++i){
if(vis[i]) printf("%lld ",i);
}
puts("");
return ;
}

T2:

已知一些热化学方程式,求目标方程式的焓变

200个方程,每个方程中有200个反映物生成物

考高斯消元和字符串的处理

我们发现关键的物质前后都有空格,所以比较好读入

然后放到矩阵里消

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<map>
#include<cmath>
using namespace std;
const int MAXN=;
const double eps=1e-;
int n,m=;
double a[MAXN][MAXN],val[MAXN];
map<string,int>mp;
string in;
void gauss(){
for(int i=;i<=max(n,m);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<=max(n,m)+;j++)
swap(a[p][j],a[i][j]);
if(fabs(a[i][i])<eps) continue;
double tmp=a[i][i];
for(int j=;j<=max(n,m)+;j++)
a[i][j]/=tmp;
for(int j=;j<=n+;j++)
if(i!=j){
double tmp=a[j][i];
for(int k=;k<=max(n,m)+;k++)
a[j][k]-=a[i][k]*tmp;
}
}
}
int main(){
//freopen("knight1.in","r",stdin);
scanf("%d",&n);
for(int i=;i<=n+;++i){
double xs;
while(in!="="){
scanf("%lf",&xs);
cin>>in;
if(mp.find(in)==mp.end()) mp[in]=++m;
a[i][mp[in]]=xs;
cin>>in;
}
while(in!="H="){
scanf("%lf",&xs);
cin>>in;
if(mp.find(in)==mp.end()) mp[in]=++m;
a[i][mp[in]]=-xs;
cin>>in;
}
if(i!=n+) scanf("%lf",&val[i]);
}
for(int i=;i<=n+;++i){
a[i][max(n,m)+]=val[i];
}
gauss();
if(a[n+][max(n,m)+]==) puts("0.0");
else printf("%0.1lf\n",-a[n+][max(n,m)+]);
return ;
}

T3:

不会,只有80分

第一问的话我们先按起点排序,然后根据终点求LIS,二分判断与k的大小关系

构造就GG了。。。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define int long long
using namespace std;
const int MAXN=1e5+;
int n,k,ans=,l=,r=,res=;
double b[MAXN],d[MAXN];
struct node{
int x,a,id;
double ed;
friend bool operator < (node p,node q){
return p.x<q.x;
}
}od[MAXN];
int c[MAXN];
int lowbit(int x){
return x&(-x);
}
void update(int pos,int val){
while(pos<=n){
c[pos]=max(c[pos],val);
pos+=lowbit(pos);
}
}
int query(int pos){
int res=;
while(pos>){
res=max(res,c[pos]);
pos-=lowbit(pos);
}
return res;
}
bool check(int tim){
for(int i=;i<=n;++i) d[i]=b[i]=(double)((double)(od[i].x)+(double)(0.5*(double)od[i].a*tim*tim));
sort(d+,d+n+);
int cnt=unique(d+,d+n+)-d-;
for(int i=;i<=n;++i) b[i]=lower_bound(d+,d+cnt+,b[i])-d;
memset(c,,sizeof(c));
res=;
for(int i=;i<=n;++i){
int tmp=query(b[i]-)+;
update(b[i],tmp);
res=max(res,tmp);
}
res=query(n);
return res>=k;
}
int fa[MAXN][],dis[MAXN],minn[MAXN][];
int lca(int x,int y){
int minnx=x,minny=y;
int i=;
for(;(<<i)<=dis[y];++i);
for(int j=i;j>=;--j){
if(fa[y][j]!=fa[x][j]){
minnx=min(minnx,minn[x][j]);
minny=min(minny,minn[y][j]);
x=fa[x][j];
y=fa[y][j];
}
}
return minnx<minny;
}
pair<int,int>tr[MAXN];
pair<int,int>max(pair<int,int> a,pair<int,int> b){
if(a.first==b.first){
return lca(a.second,b.second)?a:b;
}
else return a.first<b.first?b:a;
}
void add(int pos,pair<int,int>val){
while(pos<=n){
tr[pos]=max(tr[pos],val);
pos+=lowbit(pos);
}
}
pair<int,int>ask(int pos){
pair<int,int>res=make_pair(,);
while(pos>){
res=max(res,tr[pos]);
pos-=lowbit(pos);
}
return res;
}
void prework(int tim){
memset(minn,0x3f,sizeof(minn));
for(int i=;i<=n;++i) d[i]=b[i]=(double)((double)(od[i].x)+(double)(0.5*(double)od[i].a*tim*tim));
sort(d+,d+n+);
int cnt=unique(d+,d+n+)-d-;
for(int i=;i<=n;++i) b[i]=lower_bound(d+,d+cnt+,b[i])-d;
for(int i=;i<=n;++i){
pair<int,int>tmp=ask(b[i]-);
fa[od[i].id][]=minn[od[i].id][]=tmp.second;
dis[od[i].id]=dis[tmp.second]+;
for(int j=;j<=;++j){
fa[od[i].id][j]=fa[fa[od[i].id][j-]][j-];
minn[od[i].id][j]=min(minn[od[i].id][j-],minn[minn[od[i].id][j-]][j-]);
}
++tmp.first;
tmp.second=od[i].id;
add(b[i],tmp);
}
}
int sta[MAXN],top=;
signed main(){
scanf("%lld%lld",&n,&k);
for(int i=;i<=n;++i){
scanf("%lld%lld",&od[i].x,&od[i].a);
od[i].id=i;
}
sort(od+,od+n+);
while(l<r){
int mid=(l+r)>>;
if(check(mid)) ans=mid,l=mid+;
else r=mid;
}
printf("%lld\n",ans);
check(ans);
if(res>k){
puts("-1");
return ;
}else{
prework(ans);
int x=ask(n).second;
sta[++top]=x;
while(fa[x][]){
x=fa[x][];
sta[++top]=x;
}
sort(sta+,sta+top+);
for(int i=;i<=top;++i){
printf("%lld\n",sta[i]);
}
}
return ;
}

76:

集训过了1/3了,我还如此的菜。。。。。。

T1构造题,注意动态维护块长

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=1e5+;
int T,n,a,b;
void work(){
int p=n-a+;
for(int i=p;i<=n;++i){
printf("%d ",i);
}
int tot=n-a;
if(!tot){
puts("");
return ;
}
int siz=(tot-)/(b-);
for(int i=;i<b;++i){
if(!tot) break;
siz=(tot)/(b-i);
for(int j=;j<=siz;++j){
printf("%d ",tot-siz+j);
}
tot-=siz;
}
if(tot) printf("");
puts("");
}
int main(){
scanf("%d",&T);
while(T--){
bool flag=;
scanf("%d%d%d",&n,&a,&b);
if(a>n||b>n||a<||b<||a*b<n||n-a<b-){
puts("No");
continue;
}
puts("Yes");
work();
}
return ;
}

T2:

排序求前缀和,如果$\frac{a_i}{2}>sum_{i-1}$,那么会有断点,求断点长度即可

注意向上取整

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=1e5+;
int n,a[MAXN],ans=,sum[MAXN];
signed main(){
scanf("%lld",&n);
for(int i=;i<=n;++i) scanf("%lld",&a[i]);
sort(a+,a+n+);
for(int i=;i<=n;++i) sum[i]=sum[i-]+a[i];
for(int i=;i<=n;++i){
if((a[i]+)/>sum[i-])
ans+=(a[i]+)/-sum[i-]-;
}
printf("%lld\n",sum[n]-ans);
return ;
}

T3:

dp记忆化搜索

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=;
const int mod=1e9+;
int t,n,ans=,m,liml[MAXN],limr[MAXN],dp[MAXN][MAXN];
void preinit(){
memset(dp,-,sizeof(dp));
for(int i=;i<=n;++i) liml[i]=,limr[i]=n-i+,dp[i][]=;
dp[n+][]=;
for(int i=,x,y;i<=m;++i){
scanf("%lld%lld",&x,&y);
if(x<y) limr[x]=min(limr[x],y-x-);
else liml[y]=max(liml[y],x-y);
}
}
int dfs(int now,int siz){
if(dp[now][siz]!=-) return dp[now][siz];
++dp[now][siz];
for(int k=liml[now];k<=min(siz,limr[now]);++k){
dp[now][siz]=(dp[now][siz]+dfs(now+,k)*dfs(now++k,siz--k)%mod)%mod;
}
return dp[now][siz];
}
signed main(){
//freopen("sample.in","r",stdin);
scanf("%lld",&t);
while(t--){
scanf("%lld%lld",&n,&m);
preinit();
printf("%lld\n",dfs(,n));
}
return ;
}

csps模拟测试7576一句话题解的更多相关文章

  1. [CSP-S模拟测试50]反思+题解

    ??大部分人都觉得T3是道不可做题去刚T1T2了,于是我就侥幸苟到了前面? 这场考试比较成功的就是快速水掉了T1T2的部分分,1h拿到88分起码为之后硬肝T3上了保险(赛后发现就算T3爆零也能rank ...

  2. [CSP-S模拟测试48]反思+题解

    状态很垃圾的一场考试.感觉“这么多分就够了”的心态很是在给自己拖后腿. 打开题面,第一页赫然写着:$Claris' Contest$. 吓得我差点手一抖关掉.不过后来想想似乎强到变态的人出的题都不是很 ...

  3. [CSP-S模拟测试47]反思+题解

    打开题面,T3似乎被换过了.(那我就更有理由直接弃掉了) T1是我最害怕的乱搞题,赶紧扔了看T2.发现是个sb板子?雨天的尾巴弱化版? 然而线段树合并早忘干净了(最近几道可以线段树合并的题都是用别的方 ...

  4. csps模拟测试707172部分题解myc

    题面:https://www.cnblogs.com/Juve/articles/11678524.html 骆驼:构造题,留坑 根据5×5的矩形构造成大矩形 毛一琛: mid in the midd ...

  5. csp-s模拟测试97

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

  6. csp-s模拟测试95

    csp-s模拟测试95 去世场祭. $T1$:这不裸的除法分块吗. $T2$:这不裸的数据结构优化$Dp$吗. $T3$:这不裸的我什么都不会搜索骗$30$分吗. 几分钟后. 这除法分块太劲了..(你 ...

  7. csp-s模拟测试87

    csp-s模拟测试87 考场状态还可以$T1$我当时以为我秒切,$T2$确认自己思路不对后毅然决然码上,$T3$暴力挂了太可惜了. 03:01:28 03:16:07 03:11:38 140 03: ...

  8. csp-s模拟测试80(b)

    csp-s模拟测试80(b) 水题没什么可写的. $T1SB$规律题正解调了仨小时就过了. $T2SBDp$题颓完题解就秒了. $T3SB$数据结构考场想到正解就弃了,考后太懒一半正解一发随机化就A了 ...

  9. csp-s模拟测试99

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

随机推荐

  1. Keystone controller.py & routers.py代码解析

    目录 目录 Keystone WSGI 实现 controllerspy routerspy 参考文档 Keystone WSGI 实现 Keystone 项目把每个功能都分到单独的目录下,EXAMP ...

  2. hexo next主题深度优化(九),给博客加入主题,护眼主题,护眼色。

    文章目录 背景 效果 码 _layout.swig custom.styl eye.js 引用eye.js 直接引用 main.js pjax的函数中重写 个人博客:https://mmmmmm.me ...

  3. 实战CGLib系列之proxy篇(一):方法拦截MethodInterceptor

    实战CGLib系列文章 本篇介绍通过MethodInterceptor和Enhancer实现一个动态代理. 一.首先说一下JDK中的动态代理: JDK中的动态代理是通过反射类Proxy以及Invoca ...

  4. A1075 PAT Judge (25 分)

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  5. matplotlib画图出现乱码情况

    python3使用matplotlib画图,因python3默认使用中unicode编码,所以在写代码时不再需要写 plt.xlabel(u’人数’),而是直接写plt.xlabel(‘人数’). 注 ...

  6. PAT L2-019. 悄悄关注 /// map set

    https://www.patest.cn/contests/gplt/L2-019 题目大意: 新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注 ...

  7. CSS——背景渐变

    在线性渐变过程中,颜色沿着一条直线过渡:从左侧到右侧.从右侧到左侧.从顶部到底部.从底部到顶部或着沿任何任意轴.如果你曾使用过制作图件,比如说Photoshop,你对线性渐变并不会陌生. 兼容性问题很 ...

  8. JS预解析与变量提升

    预解析 JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的.JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程 预解析过程 ...

  9. kubernetes istio之gateway

    [root@master istio-]# kubectl apply -f samples/httpbin/httpbin.yaml service/httpbin created deployme ...

  10. duilib教程之duilib入门简明教程7.XML基础类

    现在大家应该对XML描述界面不那么陌生了,那么我们做进一步介绍. 前面的教程我们写了很多代码,为的是让大家了解下基本流程,其实duilib已经对常用的操作做了很好的包装,正式使用时无需像前面的教程那样 ...