はい。
Codeforces Round #407 (Div. 2)
A. Anastasia and pebbles
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define sc1(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d %d",&a,&b)
int w[100005];
int main(){
int n,k;
sc2(n,k);
rep(i,n) sc1(w[i]);
int h=0;
long long ans=0ll;
for(;;) {
if (w[n-1]==0) break;
w[h]=max(w[h]-k,0);
if (w[h]==0) h++;
w[h]=max(w[h]-k,0);
if (w[h]==0) h++;
ans++;
}
printf("%lld\n",ans);
return 0;
}
ポケット2つに石が混ざらないように持ち出す。優先する持ち方とかはないと思います。
B. Masha and geometric depression
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define sc1(a) scanf("%d",&a)
long long a[100005];
int main(){
long long b,q,l,m,ans=0ll;
scanf("%lld %lld %lld %lld",&b,&q,&l,&m);
rep(i,m) scanf("%lld",&a[i]);
map<int,bool> w;
if (abs(b)>l) {
printf("0\n");
return 0;
}
rep(i,m) w[a[i]]=1;
if (b==0 || q==0) {
if (w[b] && w[0]) printf("0\n");
else if (w[0]) printf("1\n");
else printf("inf\n");
return 0;
}
if (q==1) {
if (w[b]) printf("0\n");
else printf("inf\n");
return 0;
}
if (q==-1) {
if (w[b] && w[-b]) printf("0\n");
else printf("inf\n");
return 0;
}
for(;;) {
if (abs(b)>l) break;
if (w[b]==0) ans++;
b*=q;
}
printf("%lld\n",ans);
return 0;
}
なんか作成できる数列の長さを数えます。考慮漏れに気を付けましょう。気を付けましょう。