【流泪贴】教训贴~自己太渣了

不行啊不行啊,暑假训练发现自己太渣了。比同级的人拉开了一定的距离,这个距离我自己看到了(很恐怖,头一次看到自己和别人的实力差距,深有感触)。真的不是开玩笑,以后做题要写个题解发个博客了。因为以前自己是写在笔记本的,但是发现题目做得多不合适,加上自己也写了个模板,所以就没写题解。现在过题都是过了就算,没以前写题解的时候,发现某些东西其实是没想通的。没钱买笔记本了,我用博客写。以后过题在博客上写个题解。

CSU 1159: 中南才女 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1159

题目:就是给你girl"可能"到达的时间是[8,8+L],boy到达的时间是[9,9+L],他们停留的时间都是Tmin,问他们能够相遇的概率。

 

很明显,是一个几何概率的题目,我们把y设为boy到达的时间,把x设为girl到达的时间,那么很明显是y==x他们才能相遇吧?然后他们有Tmin的缓冲时间,那么就是|y-x|<=T就可以了。就是上图的红色部分(注意上图平移了8个单位)。他们就绝对能相遇。训练的时候知道是这样做了,但是怎么写程序啊。当时我就蒙逼了。其实写起来也不复杂。

首先,可以设出三条直线,一条是y=x+t,一条是y=x(参照线),然后一条是y=x-t。

先从最简单的y=x-t那条直线说起,因为它如果和y=1和x=L有交点的话,它围成的也只是三角形,面积还是比较好算的。那么就有一个问题了,他们有交点吗?这也是我训练的时候需要的最大难题。其实很简单,我们把X=L带入去y=x-t中,看看y值和1的大小就可以了,<1则证明在y=1这条线的下面,那么就是没交点了。这个挺好理解。

下面看y=x+t那条比较复杂的。因为他围成的不一定是三角形

首先如果当T=1,它就是那个正方形的对角线,然后有交点的话,也是用上面的方法判断,把x=0带入去,看看和L+1的大小即可。所以T>=1而且有交点,其实就是T<=L+1,那么就是三角形面面积直接算。

如果不是的话,我们可以把它看成s(求) = S - s(y=x),s(y=x)就是y=x这条直线和总面积下半部分相交的面积,S就是y=x+T和下半部分相交的面积,对应相减即可,注意判断无交点情况

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;

#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
double L,T;

void work ()
{
    double sum = (L-1)*(L-1)/2;//下半部分面积
    double sum_t = sum;
    double left = L*L - sum; //上半部分面积
    if (L-T>=1) sum -= (L-T-1)*(L-T-1)/2;//有交点就减去
    if (T<=L+1&&T>=1) left -= (1+L-T)*(1+L-T)/2;//围成三角形了
    else if (T<=L+1)//
    {
        left = (L+T-1)*(L+T-1)/2 - sum_t;
    }
    printf ("%lf\n",(sum+left)/(L*L));
}

int main()
{
#ifdef local
    freopen("data.txt","r",stdin);
#endif
    while(cin>>L>>T) work();
    return 0;
}
View Code

 

 

2017年8月18日 16:21:02

#1:做了3题。第一场个人排位赛打的不怎么好,做了两题签到题后。就开始做G,G是一个拓扑排序 + dp,一开始看到数据是DAG就想到了是这样的解法。然后设dp方程的时候有点难想,主要是没看清数据量m是<=5000的,手动hack了自己一开始就设对了的dp方程,然后想了半个多小时的dfs乱搞后才看到数据量。感觉以后要看清数据量和要充分利用题目的条件,把握出题人思路。还有很惨的是漏了一题莫队,一开始就打算学莫队,结果排位赛后才学。总结:看清数据量很重要

#2:做了2题。做了这场感觉是数学场,亏了的是有一个地方忘记初始化,然后一直报一个看不懂的错误。也就以为自己用了禁止用的函数,结果那个是RE错误。总结就是以后分错误是WA和TLE,因为有些时候RE也只是报WA,要加强自己的查错能力。H题应该手动打表,不应该想复杂的算法、

#3:做了4题。这场好伤,一开始就做了F,想着排序再判断。但是无论怎么排都是不合法的,但是还是没跳出不应该排序搞这样的一个思维,只想着应该可以根据某个情况排序就可以了。但是这题是最小表示法。一题做了4小时。最后压轴过了A题,不过是猜的,猜了5种情况。总结:应发散思维。

#4:做了3题。A题又是一次绝杀,开始没想到倒过来做,正着做真的比较麻烦。倒过来做容易很多。总结:找出解法后要想尽办法优化。

#5:做了6题。这场有一题我唯一AC的原题,是以前学的字符串做过的原题。题目比较偏是一个trie + exkmp。这场的难度比上面4场简单很多。不过我觉得这样才好吧,以前那4场有点偏了(我太弱了)。但是这场做的过程并不顺利,F题和I题都是wa4、5发才AC。而且F题还想了挺久。总结:一直都很怕思维题,但是今天觉得多列样例,可能就能突破思维题的困惑。但是前提是你在WA后,能正确列出一个卡掉你程序的样例。还是要多思考,后面5场多多努力。

posted on 2016-08-09 01:27  stupid_one  阅读(198)  评论(0编辑  收藏  举报

导航