A. Vasya the Hipster
随便模拟一下。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<ctime>
#define LL long long
#define db double
#define EPS 1e-1
#define inf 1e16
#define pa pair<int,int>
using namespace std;
int main(){
int a,b;
scanf("%d%d",&a,&b);
int ans1=max(a,b)-min(a,b);
int ans2=min(a,b);
int ans;
if (ans1%2==0) ans1=ans1/2;
else ans1=(ans1-1)/2;
printf("%d %d\n",ans2,ans1);
}
B. Luxurious Houses
倒着扫一遍,记录一下最大值。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<ctime>
#define LL long long
#define db double
#define EPS 1e-1
#define inf 1e16
#define pa pair<int,int>
using namespace std;
LL a[100000],ans[100000];
int main(){
int n;
scanf("%d",&n);
for (int i=0;i<n;i++){
scanf("%d",&a[i]);
}
LL maxi=a[n-1];
ans[n-1]=0;
for(int i=n-2;i>=0;i--){
ans[i] = max(maxi-a[i]+1,(LL)0);
maxi=max(maxi,a[i]);
}
for (int i=0;i<n-1;i++) printf("%I64d ",ans[i]);
printf("0");
return 0;
}
C. Developing Skills
贪心搞一下,先按照差多少能补进位,尽量去补,如果最后多了就随便补。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<ctime>
#define LL long long
#define db double
#define EPS 1e-1
#define inf 1e16
#define pa pair<int,int>
using namespace std;
int n,m,ans;
int a[100010];
inline bool cmp(int a,int b){
int x=a%10,y=b%10;x=10-x;y=10-y;
if (x<y)return 1;
if (y<x)return 0;
return a<b;
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d",&a[i]),ans+=a[i]/10;
sort(a+1,a+n+1,cmp);
for (int i=1;i<=n;i++){
if (a[i]==100) continue;
int x=a[i]%10; x=10-x;
if (x>m) break;
m-=x; a[i]+=x; ans++;
}
sort(a+1,a+n+1);
for (int i=1;i<=n;i++)while (a[i]<=90&&m>=10)ans++,a[i]+=10,m-=10;
printf("%d\n",ans);
}
D Three Logos
暴力枚举。
#include<bits/stdc++.h>
using namespace std;
int main(){
int x1,y1,x2,y2,x3,y3;
while(scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF){
int area=x1*y1+x2*y2+x3*y3;
int k=sqrt(area);
if(k*k==area){
if(y1==k)
swap(x1,y1);
if(y2==k)
swap(x2,y2);
if(y3==k)
swap(x3,y3);
if(x1==k&&x2==k&&x3==k){
printf("%d\n",k);
for(int i=1;i<=y1;i++){
for(int j=1;j<=x1;j++)
printf("A");
printf("\n");
}
for(int i=1;i<=y2;i++){
for(int j=1;j<=x2;j++)
printf("B");
printf("\n");
}
for(int i=1;i<=y3;i++){
for(int j=1;j<=x3;j++)
printf("C");
printf("\n");
}
continue;
}
int sd=0;
if(x2==k){
sd=1;
swap(x1,x2);
swap(y1,y2);
}
if(x3==k){
sd=2;
swap(x1,x3);
swap(y1,y3);
}
if(y2==k-y1){
swap(x2,y2);
}
if(y3==k-y1){
swap(x3,y3);
}
if(x2==k-y1&&x3==k-y1&&y2+y3==k){
printf("%d\n",k);
for(int i=1;i<=y1;i++){
for(int j=1;j<=x1;j++)
printf("%c",'A'+sd);
printf("\n");
}
if(sd==0){
for(int i=1;i<=x2;i++){
for(int j=1;j<=y2;j++)
printf("%c",'B');
for(int j=1;j<=y3;j++)
printf("%c",'C');
printf("\n");
}
}
if(sd==1){
for(int i=1;i<=x2;i++){
for(int j=1;j<=y2;j++)
printf("%c",'A');
for(int j=1;j<=y3;j++)
printf("%c",'C');
printf("\n");
}
}
if(sd==2){
for(int i=1;i<=x2;i++){
for(int j=1;j<=y2;j++)
printf("%c",'B');
for(int j=1;j<=y3;j++)
printf("%c",'A');
printf("\n");
}
}
continue;
}
else{
printf("-1\n");
}
}
else{
printf("-1\n");
}
}
return 0;
}