A - Biscuit Generator
分析:签到题
#include "bits/stdc++.h"
using namespace std;
long long A,B,T;
long long dp[100];
int main()
{
cin>>A>>B>>T;
dp[1]=A;
for(int i=2;i<=20;i++) dp[i]=dp[i-1]+A;
long long sum=0;
for(int i=1;i<=20;i++){
if(dp[i]>T+0.5){
break;
}
sum+=B;
}
cout<<sum<<endl;
return 0;
}
B - Resale
分析:把所有v-c为正的加进去即可
#include "bits/stdc++.h"
using namespace std;
typedef long long LL;
const int maxn=50+10;
struct node{
LL v,c;
LL cha;
}p[maxn];
int n;
bool cmp(node x,node y){
return x.cha>y.cha;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>p[i].v;
for(int i=1;i<=n;i++) cin>>p[i].c;
for(int i=1;i<=n;i++) p[i].cha=p[i].v-p[i].c;
sort(p+1,p+1+n,cmp);
int sum=0;
for(int i=1;i<=n;i++){
if(p[i].cha>=0) sum+=p[i].cha;
}
cout<<sum<<endl;
return 0;
}
C - GCD on Blackboard
分析:维护一个前缀的gcd和一个后缀的gcd,枚举每个位置,求其前缀和后缀gcd的最大值
#include "bits/stdc++.h"
using namespace std;
const int maxn=1e5+100;
typedef long long LL;
LL dp1[maxn],dp2[maxn];
int n;
LL a[maxn];
LL gcd(LL a,LL b){
return b>0?gcd(b,a%b):a;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
a[0]=a[1],a[n+1]=a[n];
for(int i=1;i<=n;i++){
dp1[i]=gcd(a[i],dp1[i-1]);
}
for(int i=n;i>=1;i--){
dp2[i]=gcd(dp2[i+1],a[i]);
}
LL ans=0;
for(int i=1;i<=n;i++){
if(i==1){
ans=max(ans,dp2[i+1]);
}else if(i==n){
ans=max(ans,dp1[i-1]);
}else{
LL tmp=gcd(dp1[i-1],dp2[i+1]);
ans=max(ans,tmp);
}
}
printf("%lld\n",ans);
return 0;
}
D - Flipping Signs
分析:看负数的个数,如果个数是偶数,则可以全部变成正数,如果个数是奇数,则有一个无法变成整数,那一定选绝对值最小的那个
#include "bits/stdc++.h"
using namespace std;
const int maxn=1e5+100;
typedef long long LL;
LL dp1[maxn],dp2[maxn];
int n;
LL a[maxn];
LL gcd(LL a,LL b){
return b>0?gcd(b,a%b):a;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
a[0]=a[1],a[n+1]=a[n];
for(int i=1;i<=n;i++){
dp1[i]=gcd(a[i],dp1[i-1]);
}
for(int i=n;i>=1;i--){
dp2[i]=gcd(dp2[i+1],a[i]);
}
LL ans=0;
for(int i=1;i<=n;i++){
if(i==1){
ans=max(ans,dp2[i+1]);
}else if(i==n){
ans=max(ans,dp1[i-1]);
}else{
LL tmp=gcd(dp1[i-1],dp2[i+1]);
ans=max(ans,tmp);
}
}
printf("%lld\n",ans);
return 0;
}