抄袭者
  • 板块灌水区
  • 楼主iCosint
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/8/28 12:23
  • 上次更新2024/8/28 12:32:59
查看原帖
抄袭者
1341252
iCosint楼主2024/8/28 12:23

原作者代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1000005;
int n, k;
LL ans = 0;
char a[N], b[N];
#define mp make_pair
multiset<pair<int, int>> s[2];
int main() {
    scanf("%d%d%s%s", &n, &k, a + 1, b + 1);
    for (int i = 1; i <= n; i++)
        if (a[i] != b[i]) {
            int x = a[i] - '0';
            if (s[!x].empty()) s[x].insert(mp(i % k, i));
            else {
                auto it = s[!x].lower_bound(mp(i % k, 0));
                if (it == s[!x].end()) it = s[!x].begin();
                ans += (i - (it -> second) - 1) / k + 1, s[!x].erase(it);
            }
        }
    printf("%lld\n", ans);
    return 0;
}

抄袭者代码

#include<bits/stdc++.h>
#define int long long//typedef long long LL;(3
#define mp make_pair//#define mp make_pair(8
using namespace std;
const int N=1e6+10;//const int N = 1000005;(4
multiset<pair<int,int> >s[2];//multiset<pair<int, int>> s[2]; (9
char a[N],b[N];//char a[N], b[N]; (7
signed main(){//int main() { (10
	int n,sum=0,k,x=0,y=0;//int n, k; (5   LL ans = 0;(6
	scanf("%lld%lld%s%s", &n, &k, a+1, b+1);//scanf("%d%d%s%s", &n, &k, a + 1, b + 1); (11
	for(int i=1;i<=n;i++){
		if(a[i]!=b[i]){
			int x=a[i]-'0';
			if(s[!x].empty())s[x].insert(mp(i%k,i));
			else{
				auto it=s[!x].lower_bound(mp(i%k,0));
	            if(it==s[!x].end())it=s[!x].begin();
	            sum+=(i-(it->second)-1)/k+1;
				s[!x].erase(it);//ans += (i - (it -> second) - 1) / k + 1, s[!x].erase(it); (19
			}
		}
	}//for 循环全抄
	cout<<sum;//printf("%lld\n", ans);
	return 0;
}
2024/8/28 12:23
加载中...