【indeed网测题】D - Yakiniku

怨念啊,边做边辅导wy、福鸡,最后还剩点时间做这题,发现挺不错的。推出个很靠谱的式子,但是不懂怎么优化,最后快结束时敲个暴力,以为赛后能提交,结果结束后界面打不开了。贴下代码。

题意是,烧烤n串食物,给出n串食物的放入时间点s[i]和拿走时间点t[i],但是拿走的时候,认不出哪个是第i个食物,会等概率随机选一个。然后问你最后每个食物没被烤熟预计考得太熟的概率分别是多少,就是在t[i]前拿走和t[i]后拿走的概率。所有的时间点s、t都不相同。以下是暴力代码,n^2的,不懂对不对,感觉挺靠谱的。再想想怎么优化。

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstdio>
#include<set>
using namespace std;
const int N = 100005;
#define mp(x,y) make_pair(x,y)
typedef pair<int,int> per;
struct time_point
{
int t,flag,id;
}tp[N];
bool cmp(time_point x,time_point y)
{
return x.t<y.t;
}
struct fd
{
int s,t;
}food[N];
double und[N],sco[N],que_und[N],que_sco[N];
int enter_und[N],enter_sco[N],lev_und[N],lev_sco[N];
int main()
{
int n;
scanf("%d",&n);
int k=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&food[i].s,&food[i].t);
tp[k].t=food[i].s;
tp[k].flag=0;
tp[k].id=i;
k++;
tp[k].t=food[i].t;
tp[k].flag=1;
tp[k].id=i;
k++;
}
int p1=0,p2=0;
sort(tp,tp+k,cmp);
int cnt=0;
for(int i=0;i<k;i++)
{
if(tp[i].flag==0)
{
enter_und[tp[i].id]=p1;
cnt++;
}
else
{
lev_und[tp[i].id]=p1;
printf("p1:%d p2:%d cnt:%d i:%d \n",p1,p2,cnt,i);
que_und[p1++]=cnt;
que_sco[p2++]=cnt;
enter_sco[tp[i].id]=p2;
cnt--;
}
}
for(int i=0;i<n;i++)
{
printf("i:%d entund:%d levund:%d \n",i,enter_und[i],lev_und[i]);
und[i]=0.0;
for(int j=enter_und[i];j<lev_und[i];j++)
{
und[i]+=(1.0-und[i])*(1.0/que_und[j]);
}
}
for(int i=0;i<n;i++)
{
sco[i]=0.0;
double pre=und[i]+(1.0-und[i])*(1.0/que_und[lev_und[i]]);
for(int j=enter_sco[i];j<p2;j++)
{
printf("pre:%lf i:%d j:%d que_sco:%lf \n",pre,i,j,que_sco[j]);
sco[i]+=(1.0-pre)*(1.0/que_sco[j]);
pre+=(1.0-pre)*(1.0/que_sco[j]);
}
}
for(int i=0;i<n;i++)printf("%.9lf %.9lf\n",und[i],sco[i]);
return 0;
}

时间: 2024-12-15 05:49:52

【indeed网测题】D - Yakiniku的相关文章

2015 CVTE校招网测部分试题(技术类)

CVTE的网测题分为技术题与行测题,都非常基础非常简单,但也有较难的题目,下面这些题都是我当时觉得稍有些难或容易答错或值得进一步推敲的题,现在分享出来,大家可以对着知识点做下,不会的Google,务必将每一个知识点都弄懂. 注意:下面的试题已选项不代表真实答案,但鼓励大家将自己的答案贴在下面,好互相对照.

indeed2017校招在线编程题(网测)三

A. Calculate Sequence 分析:就是斐波那契递推公式,但是初始值是指定的,只用求第10个数,数据范围和复杂度都比较小,直接写. B. 忘了叫啥了. 就是有a-j十个字符组成的字符串,要求去掉一些字符,使得剩下的长度大于k,且这些满足要求里面的字符串字典序最小的.然后需要枚举删除的字符串,2^10 = 1024,字符长度最大值100,所以复杂度为1024*100,在1s的时限内完全可以,直接编写. C. Anagram Multiple Number 这题好像更简单哎,求一个数的

第三章 自测题

2. (1) 化为函数极限,再利用数列极限与函数极限的关系.\[\begin{aligned}  \lim_{x\to +\infty}  (x \tan \frac 1x)^{x^2} &= \lim_{t\to 0}  \exp \frac{ \ln \frac{\tan t}{t} }{t^2} \\   &=  \exp \left(  \lim_{t\to 0}  \frac{ \ln \frac{\tan t}{t} }{t^2}\right)\\   &=  \exp

第二章自测题

1. 填空题 (1) $\frac12 f'(x_0)$ 令 $x=x_0+ \Delta x$, 则得\[  \mbox{原式}=\lim_{\Delta x\to 0}   \frac{  f(x_0 +\frac{\Delta x}{2} )-f(x_0)}{ \Delta x }   =\frac12\lim_{\Delta x\to 0}   \frac{  f(x_0 +\frac{\Delta x}{2} )-f(x_0)}{ \frac{\Delta x}{2} }=\frac1

第一章自测题

1. 填空题 (1) $\frac{2}{3}$ (2) $[1,e]$ (3) $\ln 2$ 2. 选择题: (1) (D) 课件上例题,不是无穷大的原因是,当 $x\to +\infty$, $x\cos x$ 有可能取零, 比如令 $x=n\pi +\frac\pi 2$. (2) (C) 原因是 $x\to -\infty$ 时极限存在, 要求 $\lim\limits_{x\to -\infty} e^{bx}=\infty$, 所以 $b<0$, 而 $a\geq 0$ 时, $a

牛客网刷题知识汇总2

构造函数不能声明为虚函数,析构函数可以声明为虚函数,且有时候必须声明为虚函数.构造函数和析构函数都不能调用虚函数. 先析构子类再析构父类,如果父类析构函数有虚函数,会导致调用子类的已经析构的内容. 先构造父亲类再构造子类,如果父类构造函数有虚函数,会导致调用子类还没构造的内容. A:构造函数不能声明为虚函数的原因是: 1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的.而在构造一个对象时,由于对象还未构造成功.编译器无法知道对象 的实际类型,是该类本身,还是该

indeed 5.13 第二次网测

题目描述,我找不见了,大概写一下想法和代码吧. 1. 没有看 2. 由于数据范围很小,就是简单的枚举,求全排列,然后更新答案. 1 #include<bits/stdc++.h> 2 #define pb push_back 3 typedef long long ll; 4 using namespace std; 5 typedef pair<int, int> pii; 6 const int maxn = 1e3 + 10; 7 int n, k, m; 8 int a[5

牛客网算法题之All-in-All

题目: 有两个字符串s 和t,如果即从s 中删除一些字符,将剩余的字符连接起来,即可获得t.则称t是s 的子序列.请你开发一个程序,判断t是否是s的子序列. 输入描述: 输入包含多组数据,每组数据包含两个字符串s和t. 它们都由数字和字母组成,且长度小于100000. 输出描述: 对应每一组输入,如果t是s的子序列,则输出“Yes”:否则输出“No”. 输入例子: ABC ABCABC ABABC DE 输出例子: YesYesNo 代码: package niuke; import java.

计算机操作系统第四、五章自测题-存储管理

一.单项选择题 1.存储管理的目的是(    ) . A.方便用户                 B.提高主存空间利用率 C.方便用户和提高主存利用率  D.增加主存实际容量 存储管理的目的有两个:一个是方便用户,二是提高内存利用率. 2.存储器管理中,下列说法正确的是(    ) A.无论采用哪种存储管理方式,用户程序的逻辑地址均是连续的 B.地址映射需要有硬件支撑地址变换 C.段表和页表都是由用户根据进程情况而建立的 D.采用静态重定位可实现程序浮动 静态重定位 当用户程序被装入内存时,一