AtCoder Beginner Contest 032

はい。
https://beta.atcoder.jp/contests/abc032

A - 高橋君と青木君の好きな数

Python2

a=int(raw_input())
b=int(raw_input())
n=int(raw_input())
a,b=max(a,b),min(a,b)
if n%a:
    n-=n%a
    n+=a
cnt=0
while 1:
    if (n+a*cnt)%b==0:
        print n+a*cnt
        break
    cnt+=1

ひたすらループで探す。

B - 高橋君とパスワード

Python2

s=raw_input()
k=int(raw_input())
ans=set([])
t=len(s)
for i in range(t):
    if i+k>t:
        break
    else:
        ans.add(s[i:i+k])
print len(ans)

s,kはそれほど大きくないのでスライスしてsetに放り込んで。

C - 列

Python3

n,k=map(int,input().split())
s=[]
for i in range(n):
    j=int(input())
    if j==0:
        print(n)
        exit()
    s.append(j)
ans=chk=0
t=-1
p=1
for i in range(n):
    p*=s[i]
    chk+=1
    if p<=k:
        ans=max(ans,chk)
    else:
        while p>k and t<i:
            t+=1
            p//=s[t]
            chk-=1
        ans=max(ans,chk)
print(ans)

C++14

#include<bits/stdc++.h>
using namespace std;
 
int main(){
    int mod=1000000007;
    int n,k;
    scanf("%d %d",&n,&k);
    vector<int> s(n);
    for (auto&e:s) scanf("%d",&e);
    int ans=0,chk=0,t=-1;
    long long p=1;
    for (int i=0;i<n;i++) {
        p*=s[i];
        chk++;
        if (s[i]==0) {
            ans=n;
            break;
        } else if (p<=k) {
            ans=max(ans,chk);
        } else {
            while(p>k && t<i) {
                t++;
                p/=s[t];
                chk--;
            }
            ans=max(ans,chk);
        }
    }
    printf("%d\n",ans);
    return 0;
}

初期値とか追い越さないようにとかkより大きい数が連続して並んでる場合とかを慎重にして尺取りで。