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より大きい数が連続して並んでる場合とかを慎重にして尺取りで。