T1



来自cf原题

考场直接暴力枚举 \(A,B\),15pts。

正解:

首先时间的表达式,\(T=\frac{A}{a_{i}}+\frac{B}{b_{i}}\),然后以\(\frac{1}{a_{i}}\) 为x轴,\(\frac{1}{b_{i}}\) 为y轴,建立坐标系。

将原式子转换一下,即有

\[y=-\frac{A}{B}x+\frac{T}{B}
\]

式子斜率为负,维护左下凸包,单调栈求解。

没调出来,所以贴std。

sbstd
#include<bits/stdc++.h>
#define LL long long
#define LD double
#define RG register
#define R RG int
#define G if(++ip==ie)fread(ip=buf,1,N,stdin)
using namespace std;
const int N=3e5+9;
int q[N],ne[N];
LD k[N];bool f[N];
char buf[N],*ie=buf+N,*ip=ie-1;
struct Point{
int x,y,id;
inline bool operator<(RG Point a)const{
return x>a.x||(x==a.x&&y>a.y);
}
}p[N];
inline int in()
{
G;while(*ip<'-')G;
R x=*ip&15;G;
while(*ip>'-'){x*=10;x+=*ip&15;G;}
return x;
}
inline LD Slope(RG Point&i,RG Point&j)
{ return(LD)i.x*j.x*(j.y-i.y)/((LD)i.y*j.y*(j.x-i.x)); }
int main()
{
R n=in(),t,ry=0,rx;
for(R i=1;i<=n;++i)
{
p[i].x=in();p[i].y=in();p[i].id=i;
if(ry<p[i].y||(ry==p[i].y&&rx<p[i].x))ry=p[i].y,rx=p[i].x;
}
sort(p+1,p+n+1);q[t=1]=1;
for(R i=2;i<=n&&rx<=p[i].x;++i)
{
if(p[q[t]].x==p[i].x)
{
if(p[q[t]].y==p[i].y)
ne[p[i].id]=ne[p[q[t]].id],ne[p[q[t]].id]=p[i].id;
continue;
}
while(t>1&&k[t]<Slope(p[q[t]],p[i]))--t;
q[++t]=i;k[t]=Slope(p[q[t-1]],p[i]);
}
for(;t;--t)
for(R i=p[q[t]].id;i;i=ne[i])
{ f[i]=1; }
for(R i=1;i<=n;++i)
if(f[i])printf("%d ",i);
return 0;
}

T2

一眼移项,高斯消元求解,然而高斯消元忘了,所以去打只有一个方程式的点,20pts,结果有个sb方程式 \(\Delta H=0\) ,我输出-0.0,考后我直接????,八哥暴怒

正解:

就是移项,高斯消元,把要求焓的方程式的系数都消成0,此时该方程式=右边的值的负数即为答案,注意,求解的方程只消元,不去跟别的方程交换。

恶心的地方就是读入,用俩map统计一下是否出现和物质的编号就好

Code
#include<map>
#include<cstdio>
#include<cstring>
#define MAX 210
#define re register
namespace OMA
{
int n,cnt;
double ans,h[MAX];
double ar[MAX][MAX];
const int base = 131;
std::map<int,int>id;
std::map<int,bool>vis;
inline void swap(double &a,double &b)
{ double t=a; a=b; b=t; }
inline double abs(double a)
{ return a>=0?a:-a; }
inline int get_hash(char ch[])
{
int ash = 0;
int len = strlen(ch+1);
for(re int i=1; i<=len; i++)
{ ash = ash*base+ch[i]; }
return ash;
}
inline void Gauss()
{
for(re int i=1; i<=n+1; i++)
{
int k = i;
for(re int j=i+1; j<=n; j++)
{
if(abs(ar[j][i])>abs(ar[k][i]))
{ k = j; }
}
for(re int j=1; j<=cnt+1; j++)
{ swap(ar[i][j],ar[k][j]); }
for(re int j=1; j<=n+1; j++)
{
if(i!=j)
{
double temp = ar[j][i]/ar[i][i];
for(k=i+1; k<=cnt+1; k++)
{ ar[j][k] -= temp*ar[i][k]; }
}
}
}
}
signed main()
{
char ch[10];
double tmp;
scanf("%d",&n);
for(re int i=1; i<=n; i++)
{
while(1)
{
scanf("%lf",&tmp);
scanf("%s",ch+1);
int temp = get_hash(ch);
if(!vis[temp])
{ vis[temp] = true,id[temp] = ++cnt; }
ar[i][id[temp]] = tmp;
scanf("%s",ch+1);
if(ch[1]=='=')
{ break ; }
}
while(1)
{
scanf("%lf",&tmp);
scanf("%s",ch+1);
int temp = get_hash(ch);
if(!vis[temp])
{ vis[temp] = true,id[temp] = ++cnt; }
ar[i][id[temp]] = -tmp;
scanf("%s",ch+1);
if(ch[1]=='H')
{ break ; }
}
scanf("%lf",&h[i]);
}
while(1)
{
scanf("%lf",&tmp);
scanf("%s",ch+1);
ar[n+1][id[get_hash(ch)]] = tmp;
scanf("%s",ch+1);
if(ch[1]=='=')
{ break ; }
}
while(1)
{
scanf("%lf",&tmp);
scanf("%s",ch+1);
ar[n+1][id[get_hash(ch)]] = -tmp;
scanf("%s",ch+1);
if(ch[1]=='H'&&ch[2]=='=')
{ scanf("%s",ch+1); break ; }
}
for(re int i=1; i<=n; i++)
{ ar[i][cnt+1] = h[i]; }
Gauss();
printf("%0.1lf\n",ar[n+1][cnt+1]==0?0:-ar[n+1][cnt+1]);
return 0;
}
}
signed main()
{ return OMA::main(); }

T3

没改出来,所以先咕了。

noip18的更多相关文章

  1. [考试总结]noip18

    发现之前咕掉了这个考试的总结. 今天就把它给补上. 这也是一个炸裂的一场 开局以为 \(T1\) 可做,然而事实证明我又错了... 莽了一个随机化上去,轻松过了所有样例... 以为稳了 然而挂掉了.. ...

  2. 20210717 noip18

    考前 从小饭桌出来正好遇到雨下到最大,有伞但还是湿透了 路上看到一个猛男搏击暴风雨 到了机房收拾了半天才开始考试 ys 他们小饭桌十分明智地在小饭桌看题,雨下小了才来 考场 状态很差. 开题,一点想法 ...

  3. 动态dp初探

    动态dp初探 动态区间最大子段和问题 给出长度为\(n\)的序列和\(m\)次操作,每次修改一个元素的值或查询区间的最大字段和(SP1714 GSS3). 设\(f[i]\)为以下标\(i\)结尾的最 ...

随机推荐

  1. 「AGC020F」 Arcs on a Circle

    「AGC020F」 Arcs on a Circle Link 这个题非常 Amazing 啊.果然AtCoder全是智商题 首先你可以注意到数据范围真的是小得离谱,让你想要爆搜. 然后你发现不可做, ...

  2. C++ 标准模板库(STL)——迭代器(iterators)的用法及理解

    C++ STL中迭代器(iterators)用于遍历对象集合的元素.由于容器大小随着插入删除等操作动态改变,无法像静态数组那样获取数组长度然后遍历容器里的所有元素:这时就需要迭代器,每次从容器内第一个 ...

  3. Spring Boot(三):Spring Boot中的事件的使用 与Spring Boot启动流程(Event 事件 和 Listeners监听器)

    前言:在讲述内容之前 希望大家对设计模式有所了解 即使你学会了本片的内容 也不知道什么时候去使用 或者为什么要这样去用 观察者模式: 观察者模式是一种对象行为模式.它定义对象间的一种一对多的依赖关系, ...

  4. Python图表库Matplotlib 组成部分介绍

    图表有很多个组成部分,例如标题.x/y轴名称.大刻度小刻度.线条.数据点.注释说明等等. 我们来看官方给的图,图中标出了各个部分的英文名称 Matplotlib提供了很多api,开发者可根据需求定制图 ...

  5. vue 快速入门 系列 —— vue loader 扩展

    其他章节请看: vue 快速入门 系列 vue loader 扩展 在vue loader一文中,我们学会了从零搭建一个简单的,用于单文件组件开发的脚手架.本篇将在此基础上继续引入一些常用的库:vue ...

  6. 【转载】SpringMVC学习笔记

    转载于:SpringMVC笔记 SpringMVC 1.SpringMVC概述 MVC: Model(模型): 数据模型,提供要展示的数据,:Value Object(数据Dao) 和 服务层(行为S ...

  7. ajax和springmvc的请求响应原理——深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法

    1,四大重要部分: 请求链接 post请求和get请求 请求参数形式 响应内容形式 2,从springmvc的controller角度,controller能接收到请求的前提 请求链接必须对应 pos ...

  8. 怀疑前端组件把我的excel文件搞坏了,怎么证明

    背景 我在做个需求,用户通过excel上传文件,文件中,每一行就是一条数据,后台批量处理:但是呢,用户填的数据可能有问题,所以我后台想先做个检查,然后在每一行中加一列,来指出这一行存在的问题. 我本来 ...

  9. 去掉返回的json中特殊字符

    private static String jsonString(String s) { char[] temp = s.toCharArray(); int n = temp.length; for ...

  10. 第九篇 -- 对数据库mysql进行连接并压测(二)

    上一节介绍了对mysql查询语句的压测,这一节来进一步的了解. 还是先把数据库的图放上来. 接下来打开Jmeter. 1. 回顾一下上一节学的查询语句 JDBC Request配置 结果 2. 条件查 ...