Skip to content

Instantly share code, notes, and snippets.

@yasuharu519
Created October 12, 2011 15:12
Show Gist options
  • Save yasuharu519/1281466 to your computer and use it in GitHub Desktop.
Save yasuharu519/1281466 to your computer and use it in GitHub Desktop.
GoogleCodeJamJapan2011 決勝 問題A.アンテナ修復
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def file_open(filename):
T = 0
caseList = []
with open(filename) as f:
T = int(f.readline().strip())
for i in range(T):
key = int(f.readline().strip())
value = [int(x) for x in f.readline().strip().split()]
caseList.append((key, value))
return caseList
def sortforthis(elements):
"""
>>> sortforthis([457, 478, 106, 601, 804])
[804, 601, 457, 106, 478]
>>> sortforthis([384, 675, 498, 839])
[839, 675, 384, 498]
"""
output = []
elements = sorted(elements, reverse = True)
is_even = False
if len(elements) % 2 == 0:
is_even = True
else:
is_even = False
if is_even:
output.append(elements[0])
for i in range(1, len(elements), 2):
output.append(elements[i])
for i in range(len(elements) - 2 , 1, -2):
output.append(elements[i])
else:
output.append(elements[0])
for i in range(1, len(elements) -1, 2):
output.append(elements[i])
for i in range(len(elements) - 1, 1, -2):
output.append(elements[i])
return output
def process(caseTuple):
import math
menseki = 0
numOfElements, elementsList = caseTuple
angle = 2 * math.pi / numOfElements
elementsList = sortforthis(elementsList)
for i in range(numOfElements):
j = i + 1 if i < numOfElements - 1 else 0
tmp = math.sin(angle) * elementsList[i] * elementsList[j] / 2
menseki += tmp
return menseki
def solve(caseList, outputName):
f = open(outputName, 'w')
for i, T in enumerate(caseList):
answer = process(T)
f.write("Case #" + str(i + 1) + ": " + str(answer) + "\n")
f.close()
def _test():
import doctest
doctest.testmod()
def main():
FILENAME = "A-large.in"
OUTPUTNAME = "outputAlarge.txt"
A = file_open(FILENAME)
solve(A, OUTPUTNAME)
if __name__ == "__main__":
main()
#_test()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment