A. Divisibility Problem
题目链接
输出大于或等于a的最小的b的倍数与a的差
ll a,b;
void solve()
{
rd(a),rd(b);
cout<<b*ll(ceil(1.0*a/b))-a<<endl;
/*
if(a%b==0) cout<<0<<endl;
else cout<<b*(a/b+1)-a<<endl;
*/
}
B. K-th Beautiful String
题目链接
很容易观察到,
当左边的B在倒数第2个位置时,
右边的B只能在倒数第1个位置,
b=1;
当左边的B在倒数第3个位置时,
右边的B只能在倒数第1或第2个位置,
b=2或3;
当左边的B在倒数第i个位置时,
右边的B只能在倒数第1,2,3…,i-1个位置,
b=(n-1) * (n-2)/2…n*(n-1)/2;
设左边那个B在倒数第fb个位置,
右边的B与左边的B距离为y
通过计算方程n*(n-1)/2=x
并利用ceil(不小于x的最大整数)
得出fb的值
计算出y的值
void solve()
{
rd(a),rd(b);
double x=(1+sqrt(1+8*b))/2;
ll fb=ceil(x);
ll y=(fb)*(fb-1)/2-b;
//cout<<fb<<' '<<y<<endl;
for(int i=1;i<=a;i++)
{
if(a-i+1==fb||i==-fb+a+1+y+1) cout<<'b';
else cout<<'a';
}
cout<<endl;
}
C. Ternary XOR
题目链接
观察样例,很容易看出是贪心
当第一次出现1之前,
2的话各分配1,0的话都是0;
当第一次出现1的时候,
给a数组分配1,b数组分配0;
之后所有的数都分配给b,a都是0;
int n;
string s;
void solve()
{
rd(n);
cin>>s;
string a,b;
int flag=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='2')
{
if(flag==0)
a+='1',b+='1';
else
a+='0',b+='2';
}
else if(s[i]=='0') a+='0',b+='0';
else
{
if(flag==0)
{
flag=1;
a+='1';
b+='0';
}
else
{
a+='0';
b+='1';
}
}
}
cout<<a<<endl;
cout<<b<<endl;
}
D. Carousel
需要讨论的情况比较多,需要自己构造一些样例
容易观察得最多只需要三种颜色就可以了
当且仅当每个木马都相同时,k=1;
当k=2或3时,需要使用到贪心,
因为题目要求相邻的类型不同的颜色不同,
我们直接让所有的奇数项为1,偶数项为2,
唯一需要关注的便在于首项和末项是否冲突。
如果此时n为偶数,首项为1,末项为2,不冲突;
如果n为奇数,那就要让其中一对相邻的数涂同样的颜色,其他照旧12121212循环即可,
此时注意特判开头和结尾相同的情况;
如果没有任意一对相邻的数相同,
直接输出121212121212…3
const int maxn=2e5+10;
int n,temp,i;
int a[maxn];
void solve()
{
bool flag=true;
temp=-1;
rd(n),rd(a[1]);
for(i=2;i<=n;i++)
{
rd(a[i]);
if(a[i]==a[i-1]) temp=i;
if(flag==true&&a[i]!=a[i-1]) flag=false;
}
if(a[n]==a[1]) temp=0;
if(flag==true)
{
cout<<1<<endl;
for(i=1;i<=n;i++)
cout<<1<<' ';
cout<<endl;
return;
}
if(n%2==0)
{
cout<<2<<endl;
for(i=1;i<=n;i++)
cout<<(i%2==1?1:2)<<' ';
cout<<endl;
return;
}
if(temp==-1)
{
cout<<3<<endl;
for(i=1;i<=n-1;i++)
cout<<(i%2==1?1:2)<<' ';
cout<<3<<endl;
return;
}
cout<<2<<endl;
if(temp==0)
{
for(i=1;i<=n-1;i++)
cout<<(i%2==1?1:2)<<' ';
cout<<1<<endl;
return;
}
for(i=1;i<=temp-1;i++)
cout<<(i%2==1?1:2)<<' ';
for(i=temp;i<=n;i++)
cout<<(i%2==0?1:2)<<' ';
cout<<endl;
}
EF会补QAQ