牛客周赛28

int main() {
	int arr[1000001] = { 0 };
	char str[100001] = { 0 };
	cin >> str;
	int sz = strlen(str);
	for (int i = 0; i < sz - 1; i++) {
		arr[i] = toupper(str[i]) * 100 + toupper(str[i + 1]);
	}
	sort(arr, arr + sz - 1);
	for (int i = 0; i < sz - 1; i++) {
		cout << char(arr[i] / 100 + 32) << char(arr[i] % 100 + 32) << endl;
	}
}

这是B题,当时因为头文件没写对卡了一下,当时用的是qsort带的一个排序,把cmp函数写成char*的比较就行了。这是我当时的另一个思路,之后写出来了,把字符转换为数字,然后排序对应的数字,最后输出字符。注意小写的可能是三位数,我都转大写了,事实上只要方便,a不转为A也行,只要后面能转回去。        

D题,需要注意里面的while,因为sum-arr[j]之后sum有可能还是>=k,所以必须让sum

int main() {
	ll n, k, count = 0;
	cin >> n >> k;
	vector arr(n);
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	int j = 0;
	ll sum = 0;
	for (int i = 0; i < n; i++) {
		sum += arr[i];
		while (sum >= k) {
			sum -= arr[j];
			j++;
			count += n - i;
		}
	}
	cout << count;
}

你可能感兴趣的:(算法,c++,数据结构)