読者です 読者をやめる 読者になる 読者になる

君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Good Bye 2015

はい。
http://codeforces.com/contest/611

A. New Year and Days

ざっくりと大意

・2016年で月曜〜日曜は何回あるか、x日ある月は何回あるか?みたいな感じ?

python

x=map(str,raw_input().split())
if x[-1][0]=='w':
    print 53 if x[0]=='5' or x[0]=='6' else 52
else:
    print 7 if x[0]=='31' else 11 if x[0]=='30' else 12

20160101は金曜日、20161231は土曜日。あと、2月は29日まで。

B. New Year and Old Property

ざっくりと大意

・aからbを2進数で表した際に0を一つだけ含むようなものがあればその個数は何個か。

python

a,b=map(int,raw_input().split())
al=len(bin(a))-2
bl=len(bin(b))-2
ans=chk=0
#print al,bl
for i in range(bl-al+1):
    for j in range(al+i):
        chk=['1']*(al+i)
        chk[j]='0'
        if chk[0]!='0':
            tmp=int('0b'+''.join(chk),2)
            if a<=tmp<=b:
                ans+=1
print ans

厳密には無駄があるのですがそれが原因でAC/TLEになるほどのものではなかったので調整はしませんでした。aを2進数にしたものと同じ桁数の2進数で0を1つだけ含む最小のものからbを2進数にした。0,1の使い方が力技なのですがもう少し楽な方法があるはず。。