AtCoder Beginner Contest 041 参加記

はい。 ooox
http://abc041.contest.atcoder.jp
D問題はxっても部分点は取ったので330点で122位だった。

A - 添字

python

s=raw_input()
i=int(raw_input())
print s[i-1]

i文字目を出力するのに0-indexedなことを気をつけて出力で大丈夫。

B - 直方体

python

mod=1000000007
a,b,c=map(int,raw_input().split())
print a*b*c%mod

Pythonなので最後だけmod取れば大丈夫だったけど、言語によってはa * bでmod取ってそれに * cしてmod取る必要がある場合もあり。

C - 背の順

python

n=int(raw_input())
l=map(int,raw_input().split())
memo={}
for i,j in enumerate(l):
    memo[j]=i+1
l.sort()
for i in l[::-1]:
    print memo[i]

数列のそれぞれが何番目の数か連想配列に登録して、数列はソートした。ソート済のを逆順からみて何番目の数だったかを出力した。

D - 徒競走

python

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 部分点解
import itertools

n,m=map(int,raw_input().split())
if n>8:
    print -1
    exit()
l=range(1,n+1)
memo=list(itertools.permutations(l))
q=[]
for i in range(m):
    x,y=map(int,raw_input().split())
    q.append((x,y))
ans=chk=0
for i in memo:
    f=1
    for x,y in q:
        if i.index(x)>i.index(y):
            f=0
            break
    if f: ans+=1
print ans

部分点しか出来なかった。部分点取るならNの並び方を全部列挙して、x,yが先後の矛盾がないものをカウントすれば部分点。