CF1921B 为什么这题开全局数组可以AC但是用new不行?
  • 板块题目总版
  • 楼主pigu
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/7 22:31
  • 上次更新2024/4/8 13:54:30
查看原帖
CF1921B 为什么这题开全局数组可以AC但是用new不行?
835529
pigu楼主2024/4/7 22:31

Codeforces Round 920 (Div. 3) B题 为了能直接 cin>>a+1 用的G++17而不是G++20 开全局数组可以AC,如下:

#include<iostream>
using namespace std;
const int N = 200010;
 
char a[N], b[N];
int main() {
	int t;
	cin >> t;
	while (t--) {
		int lens;
		cin >> lens;
		cin >> a+1;
		cin >> b+1;
		int sum0=0, sum1 = 0;
		for (int i = 1; i <= lens; i++) {
			if (a[i] != b[i]) {
				if (a[i] == '0')sum0++;
				else sum1++;
			}
		}
		cout << sum0+sum1-min(sum0,sum1) << endl;
	}
}

但如果按下面这么new,只能过点一卡在了点二,答案错误。

#include<iostream>
using namespace std;
 
int main() {
	int t;
	cin >> t;
	while (t--) {
		int lens;
		cin >> lens;
		char* a = new char[lens + 1];
		char* b = new char[lens + 1];
		cin >> a+1;
		cin >> b+1;
		int sum0=0, sum1 = 0;
		for (int i = 1; i <= lens; i++) {
			if (a[i] != b[i]) {
				if (a[i] == '0')sum0++;
				else sum1++;
			}
		}
		cout << sum0+sum1-min(sum0,sum1) << endl;
	}
}

还想问个问题,不能这样delete吗?也是卡在点二,但是从答案错误变成了超时。

#include<iostream>
using namespace std;
 
int main() {
	int t;
	cin >> t;
	while (t--) {
		int lens;
		cin >> lens;
		char* a = new char[lens + 1];
		char* b = new char[lens + 1];
		cin >> a+1;
		cin >> b+1;
		int sum0=0, sum1 = 0;
		for (int i = 1; i <= lens; i++) {
			if (a[i] != b[i]) {
				if (a[i] == '0')sum0++;
				else sum1++;
			}
		}
		cout << sum0+sum1-min(sum0,sum1) << endl;
		delete[]a;
		delete[]b;
	}
}

查不到,我也想不明白 可能描述不清望海涵

2024/4/7 22:31
加载中...