代码源集训复盘
Day4(7.24):附加题单1
挺多诈骗题的。。。
悲惨的成绩。
A Gym - 105949F
读完题分析样例后可以发现,我们填充的数值必然是一段 1 1 1 后一段 0 0 0。如果填充 的有 0 0 0 在 1 1 1 前面,则交换它们必然不劣。 枚举填充 1 1 1 和 0 0 0 的分界,维护当前逆序对数取最大即可。实现稍有难度。
void sol(){
int n;
cin>>n;
string s;
cin>>s;
s='*'+s;
int cnt1=0,cnt=0,sum=0;
for(int i=1;i<=n;i++){
if(s[i]=='1')
cnt1++;
else
sum+=cnt1,cnt++;
}
int ans=sum,cnt2=0;
for(int i=1;i<=n;i++){
if(s[i]=='?'){
sum-=cnt2;
cnt2++,cnt--;
sum+=cnt;
ans=max(ans,sum);
}
else if(s[i]=='1')
cnt2++;
else
cnt--;
}
cout<<ans<<endl;
}
B Gym - 105930D
对于每个子任务,所有节点至少分配 ⌊ a i n ⌋ \lfloor \frac{a_i}{n} \rfloor ⌊nai⌋ 个子任务,剩下的 a i m o d n a_i\mod n ai


最低0.47元/天 解锁文章
1906

被折叠的 条评论
为什么被折叠?



