CF398A Cards | 贪心
我怎么连这种题都做得那么艰难……
可以发现一些结论,然后枚举'x'被分成几段就好了。
我真的越来越菜
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int cnt[100005]; int main() { int a=0,b=0,c=0; long long ans=-1e18; scanf("%d%d",&a,&b); if(b==0) { printf("%I64d\n",(long long)a*a); for(int i=1;i<=a;i++) putchar('o'); return 0; } for(int i=1;i<=min(a+1,b);i++) { long long x=b/i,y=b%i,k=max(0,i-2); long long w=-i*x*x-y*(2*x+1); w+=k+(long long)(a-k)*(a-k); if(w>ans) ans=w,c=i; } printf("%I64d\n",ans); for(int i=1;i<=c;i++) cnt[i]=b/c; for(int i=1;i<=b%c;i++) cnt[i]++; for(int i=1;i<=c-1;i++) { if(i>1) putchar('o'); for(int j=1;j<=cnt[i];j++) putchar('x'); } for(int i=1;i<=a-c+2-(c==1);i++) putchar('o'); for(int j=1;j<=cnt[c];j++) putchar('x'); return 0; }