Initial Commit

This commit is contained in:
2018-03-25 22:52:29 -04:00
parent e6cdcaf629
commit ba93dced32
26 changed files with 66269 additions and 0 deletions

73
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MarkdownProjectSettings">
<PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="2.0" maxImageWidth="0" showGitHubPageIfSynced="false" allowBrowsingInPreview="false" synchronizePreviewPosition="true" highlightPreviewType="NONE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="false" showSelectionInPreview="true" openRemoteLinks="true">
<PanelProvider>
<provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.panel" providerName="Default - Swing" />
</PanelProvider>
</PreviewSettings>
<ParserSettings gitHubSyntaxChange="false">
<PegdownExtensions>
<option name="ABBREVIATIONS" value="false" />
<option name="ANCHORLINKS" value="true" />
<option name="ASIDE" value="false" />
<option name="ATXHEADERSPACE" value="true" />
<option name="AUTOLINKS" value="true" />
<option name="DEFINITIONS" value="false" />
<option name="DEFINITION_BREAK_DOUBLE_BLANK_LINE" value="false" />
<option name="FENCED_CODE_BLOCKS" value="true" />
<option name="FOOTNOTES" value="false" />
<option name="HARDWRAPS" value="false" />
<option name="HTML_DEEP_PARSER" value="false" />
<option name="INSERTED" value="false" />
<option name="QUOTES" value="false" />
<option name="RELAXEDHRULES" value="true" />
<option name="SMARTS" value="false" />
<option name="STRIKETHROUGH" value="true" />
<option name="SUBSCRIPT" value="false" />
<option name="SUPERSCRIPT" value="false" />
<option name="SUPPRESS_HTML_BLOCKS" value="false" />
<option name="SUPPRESS_INLINE_HTML" value="false" />
<option name="TABLES" value="true" />
<option name="TASKLISTITEMS" value="true" />
<option name="TOC" value="false" />
<option name="WIKILINKS" value="true" />
</PegdownExtensions>
<ParserOptions>
<option name="COMMONMARK_LISTS" value="true" />
<option name="DUMMY" value="false" />
<option name="EMOJI_SHORTCUTS" value="true" />
<option name="FLEXMARK_FRONT_MATTER" value="false" />
<option name="GFM_LOOSE_BLANK_LINE_AFTER_ITEM_PARA" value="false" />
<option name="GFM_TABLE_RENDERING" value="true" />
<option name="GITBOOK_URL_ENCODING" value="false" />
<option name="GITHUB_EMOJI_URL" value="false" />
<option name="GITHUB_LISTS" value="false" />
<option name="GITHUB_WIKI_LINKS" value="true" />
<option name="JEKYLL_FRONT_MATTER" value="false" />
<option name="SIM_TOC_BLANK_LINE_SPACER" value="true" />
</ParserOptions>
</ParserSettings>
<HtmlSettings headerTopEnabled="false" headerBottomEnabled="false" bodyTopEnabled="false" bodyBottomEnabled="false" embedUrlContent="false" addPageHeader="true" embedImages="false" embedHttpImages="false">
<GeneratorProvider>
<provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.generator" providerName="Default Swing HTML Generator" />
</GeneratorProvider>
<headerTop />
<headerBottom />
<bodyTop />
<bodyBottom />
</HtmlSettings>
<CssSettings previewScheme="UI_SCHEME" cssUri="" isCssUriEnabled="false" isCssTextEnabled="false" isDynamicPageWidth="true">
<StylesheetProvider>
<provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.css" providerName="Default Swing Stylesheet" />
</StylesheetProvider>
<ScriptProviders />
<cssText />
</CssSettings>
<HtmlExportSettings updateOnSave="false" parentDir="$ProjectFileDir$" targetDir="$ProjectFileDir$" cssDir="" scriptDir="" plainHtml="false" imageDir="" copyLinkedImages="false" imageUniquifyType="0" targetExt="" useTargetExt="false" noCssNoScripts="false" linkToExportedHtml="true" exportOnSettingsChange="true" regenerateOnProjectOpen="false" linkFormatType="HTTP_ABSOLUTE" />
<LinkMapSettings>
<textMaps />
</LinkMapSettings>
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6 (naipc)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/naipc.iml" filepath="$PROJECT_DIR$/.idea/naipc.iml" />
</modules>
</component>
</project>

13
.idea/naipc.iml generated Normal file
View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>

8
facts.py Normal file
View File

@@ -0,0 +1,8 @@
import json
MOD = 10 ** 9 + 7
lst = [1]
for x in range(1, 100_000):
lst.append((lst[-1] * x) % MOD)
with open('mod.json','w') as f:
json.dump(lst, f)

19
genwords.py Normal file
View File

@@ -0,0 +1,19 @@
import random
from itertools import *
from math import factorial
alph = 'pyfgcrlaoeuidhtnsqjkxbmwvz'
L = 200
K = 5
combos = [''.join(x) for x in combinations(alph, r=K)]
with open('test/prefix/mytest.in', 'w') as f:
f.write(f'{len(combos)} {K}\n')
for w in combos:
f.write(w)
f.write('\n')
# f.write(''.join(random.choice(combos) for _ in range(10)))
f.write(''.join(combos[:4]))

26
gnomes.py Normal file
View File

@@ -0,0 +1,26 @@
n, m = map(int, input().split())
dat = [int(input()) for _ in range(m)]
sdat = set(dat)
missing = [x for x in range(1, n + 1) if x not in sdat]
res = []
i = 0
j = 0
while i < len(dat) and j < len(missing):
if dat[i] < missing[j]:
res.append(dat[i])
i += 1
else:
res.append(missing[j])
j += 1
while i < len(dat):
res.append(dat[i])
i += 1
while j < len(missing):
res.append(missing[j])
j += 1
for x in res:
print(x)

61
prefixfree.py Normal file
View File

@@ -0,0 +1,61 @@
MOD = 10 ** 9 + 7
def factorials(n, c):
l = [1]
for x in range(c + 1, n):
l.append((l[-1] * x) % MOD)
return l
N, K = map(int, input().split())
alph = []
for _ in range(N):
inp = input().strip()
alph.append(inp)
alph = sorted(alph)
fac = factorials(len(alph), N - K)
TREE = {}
for ind, init in enumerate(alph):
tree_ = TREE
i = 0
while init[i] in tree_ and isinstance(tree_[init[i]], dict):
tree_ = tree_[init[i]]
i += 1
substr = init[i + 1:-1]
subtree = {}
if substr:
st_ = subtree
for c in substr:
st_[c] = {}
st_ = st_[c]
st_[init[-1]] = ind
else:
subtree = ind
tree_[init[i]] = subtree
def get_blocks(s):
tree_ = TREE
for c in s:
if isinstance(tree_, dict):
tree_ = tree_[c]
else:
yield tree_
tree_ = TREE[c]
yield tree_
inds = list(get_blocks(input().strip()))
index = 0
indexes = list(range(len(alph)))
for j, i in enumerate(inds):
k = indexes.index(i)
del indexes[k]
index += (fac[K - j - 1] * k) % MOD
print(index + 1)

36
probedroids.py Normal file
View File

@@ -0,0 +1,36 @@
import operator
from pprint import pprint
n, m, q = map(int, input().split())
nums = {}
for x in range(n):
for y in range(m):
if x == 0 and y == 0:
continue
s = (x / y) if y != 0 else float('inf')
nums.setdefault(s, []).append((x, y))
buckets = sorted(nums)
buckets = [nums[b] for b in buckets]
blens = []
blen = 0
for b in buckets:
blen += len(b)
blens.append(blen)
def find_bucket(i):
x = 0
while x < len(blens) - 1 and blens[x] <= i:
x += 1
return x, i - blens[x]
for _ in range(q):
i = int(input())-1
x, i = find_bucket(i)
buckets[x].sort()
a, b = buckets[x][i]
print(a + 1, b + 1)

66
probedroids2.py Normal file
View File

@@ -0,0 +1,66 @@
import operator
from math import *
from pprint import pprint
n, m, q = map(int, input().split())
def f(s):
if s == 0:
return 0
if s == float('inf'):
return m * n - 1
return m - 1 + sum(m - y // s - 1 for y in range(1, n + 1))
def g(s1, s2):
print(f"g({s1},{s2})")
lst = []
if s2 == float('inf'):
for x in range(0, m):
for y in range(int(ceil(x * s1)), n):
if (x, y) != (0,0):
lst.append((x, y))
else:
for x in range(0, m):
for y in range(int(ceil(x * s1)), int(floor(x * s2) + 1)):
if (x, y) != (0,0):
lst.append((x, y))
return lst
def search(i, bound):
lowerS = 0
lowerC = 0
upperS = float('inf')
upperC = m * n - 1
while (upperC - lowerC > bound):
tempS = (lowerS + upperS) / 2
tempC = f(tempS)
if (tempC > i):
upperC = tempC
upperS = tempS
else:
lowerC = tempC
lowerS = tempS
return g(lowerS, upperS), lowerC
def get(i):
print('case i=', i)
pts, lowc = search(i, 1000)
pts = sorted(((y / x if x != 0 else float('inf')), x, y) for x, y in pts)
print(i, lowc)
pprint(pts)
_, x, y = pts[i - lowc]
return y + 1, x + 1
for _ in range(q):
i = int(input()) - 1
print(*get(i))

3
readme.md Normal file
View File

@@ -0,0 +1,3 @@
# UNCC Gold NAIPC solution
Solution attempts by UNCC Gold team at NAIPC.

0
test/prefix/mytest.ans Normal file
View File

65782
test/prefix/mytest.in Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
26

View File

@@ -0,0 +1,7 @@
5 3
a
b
c
d
e
cad

View File

@@ -0,0 +1 @@
12451

View File

@@ -0,0 +1,10 @@
8 8
font
lewin
darko
deon
vanb
johnb
chuckr
tgr
deonjohnbdarkotgrvanbchuckrfontlewin

View File

@@ -0,0 +1 @@
like 20 or something

View File

@@ -0,0 +1,2 @@
1000000 1000000 1
47

View File

@@ -0,0 +1,3 @@
1 2
3 1
3 5

View File

@@ -0,0 +1,4 @@
3 5 3
1
14
8

View File

@@ -0,0 +1,2 @@
1
0

View File

@@ -0,0 +1,6 @@
3 2
1 0
0 1
1000 1
1 3
2 3

View File

@@ -0,0 +1,2 @@
300
299

View File

@@ -0,0 +1,7 @@
4 2
0 0
1000 1000
300 300
1 1
1 3
2 4

25
testing.py Normal file
View File

@@ -0,0 +1,25 @@
import glob, sys, subprocess
_, src, test, t = sys.argv
ig = glob.glob(f'test/{test}/*.in')
og = glob.glob(f'test/{test}/*.ans')
print(test, len(ig), 'tests')
for ifn, ofn in zip(ig, og):
with open(ifn) as fi, open(ofn) as fx:
try:
o = subprocess.check_output(['python', src],
stdin=fi, stderr=subprocess.STDOUT,
timeout=float(t))
except subprocess.CalledProcessError as e:
o = e.output
except subprocess.TimeoutExpired:
o = b'TIMED OUT'
o = o.decode().strip().replace('\r\n', '\n')
x = fx.read().strip().replace('\r\n', '\n')
if o != x:
print(ifn, 'expected:', x, 'got:', o, '=' * 50, sep='\n')

103
zoninghouses.py Normal file
View File

@@ -0,0 +1,103 @@
n, q = map(int, input().split())
coords = []
for _ in range(n):
x, y = map(int, input().split())
coords.append((x, y))
zone = []
for _ in range(q):
a, b = map(int, input().split())
zone.append((a, b))
def f(a, b, lst):
if b - a <= 1:
return 0
# minimum of the first 3
aXmin = min(lst[a][0], lst[a+1][0])
aXmax = max(lst[a][0], lst[a+1][0])
aYmin = min(lst[a][1], lst[a+1][1])
aYmax = max(lst[a][1], lst[a+1][1])
aLen = max(abs(aXmax-aXmin), abs(aYmax-aYmin))
bXmin = min(lst[a + 2][0], lst[a + 1][0])
bXmax = max(lst[a + 2][0], lst[a + 1][0])
bYmin = min(lst[a + 2][1], lst[a + 1][1])
bYmax = max(lst[a + 2][1], lst[a + 1][1])
bLen = max(abs(bXmax - bXmin), abs(bYmax - bYmin))
cXmin = min(lst[a][0], lst[a + 2][0])
cXmax = max(lst[a][0], lst[a + 2][0])
cYmin = min(lst[a][1], lst[a + 2][1])
cYmax = max(lst[a][1], lst[a + 2][1])
cLen = max(abs(cXmax - cXmin), abs(cYmax - cYmin))
if(aLen < bLen):
if(aLen < cLen):
osXmin = aXmin
osXmax = aXmax
osYmin = aYmin
osYmax = aYmax
osLen = aLen
else:
osXmin = cXmin
osXmax = cXmax
osYmin = cYmin
osYmax = cYmax
osLen = cLen
else:
if (bLen < cLen):
osXmin = bXmin
osXmax = bXmax
osYmin = bYmin
osYmax = bYmax
osLen = bLen
else:
osXmin = cXmin
osXmax = cXmax
osYmin = cYmin
osYmax = cYmax
osLen = cLen
nsLen = osLen
allXmin = min(aXmin, lst[a+2][0])
allXmax = max(aXmax, lst[a+2][0])
allYmin = min(aYmin, lst[a+2][1])
allYmax = max(aYmax, lst[a+2][1])
allLen = max(abs(allXmax-allXmin), abs(allYmax-allYmin))
# print(f"nsLen={nsLen}, osLen={osLen}, allLen={allLen}")
for i in lst[a + 3:b + 1]:
osXmin = min(osXmin, i[0])
osXmax = max(osXmax, i[0])
osYmin = min(osYmin, i[1])
osYmax = max(osYmax, i[1])
osLen = max(abs(osXmax - osXmin), abs(osYmax - osYmin))
nsXmin = allXmin
nsXmax = allXmax
nsYmin = allYmin
nsYmax = allYmax
nsLen = allLen
# print(f"nsLen={nsLen}, osLen={osLen}, allLen={allLen}")
allXmin = min(allXmin, i[0])
allXmax = max(allXmax, i[0])
allYmin = min(allYmin, i[0])
allYmax = max(allYmax, i[0])
allLen = max(abs(allXmax - allXmin), abs(allYmax - allYmin))
# print(f"nsLen={nsLen}, osLen={osLen}, allLen={allLen}")
if (nsLen < osLen):
osXmin = nsXmin
osXmax = nsXmax
osYmin = nsYmin
osYmax = nsYmax
return nsLen
for a, b in zone:
print(f(a-1, b-1, coords))