GCJJ 予選に参加した
結果としては敗退。A,Cを解いたのだけど、Aは手を抜いて作ったのでlargeがメモリ不足、Cは考え方としては間違ってないが多分longあたりちゃんととってなくて間違ってた。
それはともかく手を抜いたり変数名適当だったりていい加減っすね。
A
# -*- coding:utf-8 -*- #Read input file import sys def p(s): #print s pass def main(fileName): setting, testData = fileOpen(fileName) i = 0 for t in testData: i += 1 cond = t[0] count = searchcard(cond,t[1:]) print "Case #%d: %d" % (i,count) def searchcard(cond, suffle_patterns): M, C, W = cond # データ作る #print M data = [i+1 for i in xrange(0,int(M))] for sp in suffle_patterns: p("状態") p(data) a = int(sp[0])-1 b = int(sp[1]) #p a,b data_sub = data[a:a+b] #print "sub,",data_sub data[a:a+b] = [] p( "before:") p(data) data= data_sub + data p("after:") p(data) return data[int(W)-1] def fileOpen(fileName): f = open(fileName) i = 0 c = 0 t = 0 setting = {} testData = [] testDataSub = [] for line in f: if i == 0: #parse first line t = int(line[:-1]) #p("t",t) elif c == 0: t -= 1 #print("t2") #print line[:-1] if i > 1: testData.append(testDataSub) testDataSub = [] if t < 0: break M, C, W = line[:-1].split() c = int(C) #print("M,C,W ", M,C,W) testDataSub.append((M,C,W)) elif t >= 0: # A_i, B_i相当 aibi = line[:-1].split() testDataSub.append(aibi) #p(aibi) c -= 1 i += 1 if testDataSub != []: testData.append(testDataSub) testDataSub = [] return setting, testData def parseFirstLine(str): """ """ result={} (result["L"],result["D"],result["N"]) = str.split() for i in result.keys(): result[i] = int(result[i]) return result if __name__ == "__main__": if len(sys.argv) > 1: main(sys.argv[1]) else: import doctest doctest.testmod(verbose=True) #"usage: exefile inputfile"
B
# -*- coding:utf-8 -*- #Read input file import sys from math import log def p(s): #print s pass def p2(s): #print s, pass def main(fileName): #print sys.maxint setting, testData = fileOpen(fileName) i = 0 #print testData for t in testData: i+=1 count = calc(t) print "Case #%d: %d" % (i,count) def f(x): """ >>> f(5) 2 >>> f(10**18) 36 """ s = format(x,'b') r = 0 for s2 in s: if s2=='1': r+=1 return r def calc(d): # データ作る m = int(log(d+1,2)) p("d,m") p(d) p(m) #max_f = 0 #for i in xrange(0,m): #n = m-i p("n"), p(m) a = 2**m-1 b = d-a p2("a:") p2(a) p2(" b:") p2(b) fa = f(a) fb = f(b) p2("fa:") p2(fa) p2("fb:") p(fb) #if max_f < fa+fb: max_f = fa+fb return max_f def fileOpen(fileName): f = open(fileName) i = 0 c = 0 t = 0 setting = {} testData = [] for line in f: if i == 0: #parse first line t = int(line[:-1]) #p("t",t) else : testData.append(int(line[:-1])) i += 1 return setting, testData def parseFirstLine(str): """ """ result={} (result["L"],result["D"],result["N"]) = str.split() for i in result.keys(): result[i] = int(result[i]) return result if __name__ == "__main__": if len(sys.argv) > 1: main(sys.argv[1]) else: import doctest doctest.testmod(verbose=True) #"usage: exefile inputfile"