2018青岛区域赛训练总结及cde题解

本文是关于2018年青岛区域赛的赛后总结,作者分享了在比赛中的教训,如IO处理的重要性,以及在C、E、D题目上的解题思路。在C题中,讨论了如何处理两个01串使其相同的方法;E题是一个二分查找问题,需要判断权值最小值的最大化;D题涉及数字构成问题,通过枚举解决。
摘要由CSDN通过智能技术生成

这场一开始st卡在了IO的上面T了两发,我wa了两发c,有一些情况没有考虑到。50mins的时候我看st代码,发现没问题大胆换了IO,AC,跟st讲了2minsC的时候发现了wa点,改了AC。随后cxy也AC了J题。大概过了快1小时,我们做不下去了,退场补题,发现DE还是可以做的,对标区域赛铜尾,如果DE开出来可能能进到银尾。
总结:

  1. IO必须开。
  2. 现场赛签到还是和队友讨论后交。
  3. E题没有耐心想下去。
    M J是队友写的,貌似也是签到不写了。
    题解:
    C
    题意:给你2个01串,你可以选择两个区间将区间内的所有数0变1,1变0。问有几种方法把他变为一样。卡O1
    思路:
    如果有两个联通块区间不一样那么方案数为6。
    如果都一样那么方案数为(n+1)*n/2
    如果只有1个,那么方案数为不一样的个数(cnt-1)2+一样的个数cnt22
    此外0
    代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define forn(i,n) for(int i=0;i<n;i++)
#define for1(i,n) for(int i=1;i<=n;i++)
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
const int inf = 0x3f3f3f3f;
const ll INF =0x3f3f3f3f3f3f3f3f;

int main(){
   
	IO;
	int t;cin>>t;
	while(t--){
   
		int n;cin>>n;
		string s,t;cin>>s>>t;
		vector<int>a;
		forn(i,n){
   
			if(s[i]==t[i]) a.push_back(0);
			else a.push_back(1);
		}
		int id = 0;
		forn(i,n)if(a[i]){
   
			if(i&&a[i-1]);
			else id++;
		}
		if(id>2){
   
			cout<<0<<'\n';
		}else if(id==2){
   
			cout << 6<<'\n';
		}else if(id==1){
   
			int cnt = -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值