赞
踩
- 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<k的时候才能进行i++,while是一种处理方式,只要按照思路处理就行.
- int main() {
- ll n, k, count = 0;
- cin >> n >> k;
- vector<ll> 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;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。