BC43ProB

python cmath 是复数的sqrt,因此返回的是复数

问题2:

描述:

n张卡片摆成一排,分别为第1张到第n张,开始时它们都是下面朝下的。你有两种操作:

T(i,j):将第i张到第j张卡片进行翻转,包含i和j这两张。(正面变反面,反面变正面)
Q(i):如果第i张卡片正面朝下,返回0;否则返回1.

对于每个query,操作1是ON的操作2是O1的因此m次query最坏O(mn)

现在采用树状数组,可以使得每个query都是logn, 以此降低总的时间为O(mlogn)

http://www.hawstein.com/posts/binary-indexed-trees.html#change

python 输入两个int变量怎么弄

var1, var2 = [int(x) for x in raw_input(“Enter two numbers here: “).split()]

python打印浮点数,不要加float(),否则又会按照float的定义,打印一位小数

print 0.00
它也会先转成float然后按照0.0打印,因此一定要
print (“%.2f” % 0)

第一次听《烟花易冷》,感觉作曲不太圆润,没有看歌词,有点飘忽不定。但是鉴于以往,JAY的很多歌都是渐入型的,就是第一次听没感觉,越听越会陷进去,譬如“以父之名”“夜曲”之类,于是多听几次试试。
调出了歌词,以卡拉OK模式走动,伴曲轻扬,听着听着,有点孤独的感觉,像是走进了《诛仙》,不知道大家看过诛仙没有,个人认为是目前最好看的小说之一。像书中男主角小凡,孤单落寞,跪在雨中,无人问津的情形。

再听几遍,加上反复领略歌词意境,“雨纷纷,旧故里草木深;我听闻,你始终一个人 ”“城郊牧笛声,落在那座野村;缘份落地生根是,我们”发现之前认为的曲调多拐一点都不存在了,反而是抑扬之间渗出了几丝佛韵,让人心静止水,遁入空门..方文山文雅,含蓄的淡淡几个字却写出山水长天无穷幻化的意境,着实佩服!

整夜调成单曲循环,伴曲入睡,半夜里泪流满面,感觉到五脏六腑的翻滚,多情伤离别,冷落清秋节..
传说中有首歌叫“黑色星期五”说是听了的人多会抑郁,产生轻生之念,后因全球多人听此歌自杀,遍成了全球禁歌。

今次听周杰伦新歌《烟花易冷》,我不敢保证这首歌会不会像“东风破”,“青花瓷”一般成为老少皆宜引领流行乐坛走势的中国风潮曲,但是字曲间流露出的伤感和淡薄却足以让人脱凡离尘,隐约有种出家的冲动。是为神曲!

不知道各位亲友听了之后有没有同感,小弟大胆预言:周杰伦这首最新的单曲《烟花易冷》很可能因引发佛门大盛而成为全球禁歌!

一篇不错的 帖子
http://machinelearningmastery.com/building-a-production-machine-learning-infrastructure/
自己想成为的方向,但是还差的很多

http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=599&pid=1002

今晚BC第二题是一道非常有趣的算法题。

给定一个数组和p,求max(i!=j) (a[i]+a[j])%p

n=10^5 初看是n^2的搜索空间,似乎有nlogn算法,于是朝二分靠
但是发现没有二分的性质,因为一个点定下来,后面的点和这个点的和不是单调的,因此没有二分砍的条件。

后来问了bin神,大概是我的级别不够,没有完全理解。

随后我想了一下,全部取模之后就是两类了,一类是twosum<p, 一类是p<=twosum<2p-1

因此我就对于一个点,先二分出第一次和>=p的,然后第一类max就是前一点,第二类max就是最后一点,二分上届是i+1,下界是n-1

while(~scanf("%lld%lld", &n, &p))
{
    for(int i=0;i<n;i++) scanf("%d", &a[i]), a[i]%=p;
    sort(a, a+n);
    LL ans=(a[0]+a[1])%p;
    for(int i=0;i<n-1;i++)
    {
        int low=i+1,high=n-1;
        while(low<high)
        {
            int mid=(low+high)/2;
            if(a[mid]+a[i]>=p) high=mid;
            else low=mid+1;
        }
        //low
        ans=max(max(ans, (a[i]+a[low-1])%p), (a[i]+a[n-1])%p);
    }
    printf("%lld\n", ans);
}

后来看了题解,第二步处理可以on搞定。
因为最大两个数一定是第二类max,现在找第一类max,如果小的从小到大枚举,
那么大的一定是从大到小枚举,双指针算法需要满足这个性质。

之前很多双指针的算法一直不明白什么时候可以用
比如right找到了sum<=p的最大值,那么right不可能再往后面,因为前面会大,
所以right不需要回溯的,前面同理。

所以是ON的一个扫描

while(~scanf("%lld%lld", &n, &p))
{
    for(int i=0;i<n;i++) scanf("%lld", &a[i]), a[i]=a[i]%p;
    sort(a, a+n);
    LL ans=(a[n-2]+a[n-1])%p;
    int i=0, j=n-1;
    //while(a[i]+a[j]>=p) j--;
    while(i<j)
    {
        while(i<j && a[i]+a[j]>=p) j--;
        if(i<j) ans=max(ans, (a[i]+a[j])%p);
        i++;
        while(i<j && a[i]+a[j]<p) i++;
        if(i-1<j) ans=max(ans, (a[i-1]+a[j])%p);
        j--;
    }
    printf("%lld\n", ans);//<<endl;
}

Posted by richard爱闹 - 6月 7 2015
如需转载,请注明: 本文来自 Richard