题解:P10330 [UESTCPC 2024] 黑白珠串
vernal_blossom · · 题解
思路
1.多少个珠子\ 其实就是枚举每个要求,取黑珠子最多需要多少,白珠子最多需要多少个,两个值相加就是需要的珠子数。\ 2.打印黑白珠串\ 我们已经知道了黑珠子和白珠子要多少个,相同颜色的珠子挨在一起,挨个打印出来就行了。\ 为啥相同颜色的珠子可以挨一起呢?看下一个问题应该就明白了。\ 3.每个要求子串的位置\ 如果黑珠子在前,就用黑珠子需要的总量减去这个子串要求的黑珠子数量,减去后得到的数就是这个子串的位置了。\ \ 如果是白珠子在前同理,就用白珠子需要的总量减去这个子串要求的白珠子数量就行了。
代码实现
#include<bits/stdc++.h>
using namespace std;
int len[100010],b[100010];
int main()
{
int k,maxn=0,w=0;
cin>>k;
for(int i=1;i<=k;i++)
{
cin>>len[i]>>b[i];
maxn=max(maxn,b[i]);//黑珠子数量
w=max(w,len[i]-b[i]);//白珠子数量
}
cout<<maxn+w<<endl;//总共需要多少个珠子
for(int i=1;i<=maxn;i++)//打印黑色的珠子
{
cout<<1;
}
for(int i=1;i<=w;i++)//打印白色的珠子
{
cout<<'0';
}
cout<<endl;
for(int i=1;i<=k;i++)//每个子串的位置
{
cout<<maxn-b[i]<<endl;
}
return 0;
}