1998(965div2)

A. Find K Distinct Points with Fixed Center

给你三个整数 xcyck ( 100xc,yc100 , 1k1000 )。

找到 k 个点,(xi,yi) 满足 xi=k×x,yi=k×y 109xi,yi109

做麻烦了...

void solve() {
    int x, y, k;cin >> x >> y >> k;

    if (k & 1) {
        cout << x * k << " " << y * k << '\n';k--;
    } else {
        cout << x * (k / 2) + 100000000 << " " << y * (k / 2) + 100000000 << '\n';
        cout << x * (k - k / 2) - 100000000 << " " << y * (k - k / 2) - 100000000 << '\n';
        k -= 2;
    }
    for (int i = 1;i <= k;i++) {
        if (i & 1)
            cout << - i - 1 + 10000000 << " " << - i - 1 + 10000000 << '\n';
        else
            cout << i - 10000000 << " " << i - 10000000 << '\n';
    }
}
void solve() {
	int x, y, k; cin >> x >> y >> k;
	for(int i = 0; i < k - k % 2; i++){
		cout << x - (i & 1 ? 1 : -1) * (i / 2 + 1) << " " << y << "\n";
	} 
	if(k & 1){
		cout << x << " " << y << "\n";
	}
}

B. Minimize Equal Sum Subarrays

给你一个长度为 n 的排列组合 p

求长度为 n 的排列组合 q 使 pi+pi+1++pj=qi+qi+1++qj 的成对数 ( i,j ) ( 1ijn ) 最小。

也就是说要让两个排列尽量不要出现在 [l,r] 区间内区间和相等的情况。这个题就很简单了,直接移一位即可满足。

rotate(p.begin(), p.begin() + 1, p.end());
void solve() {
    int n;cin >> n;
    vector<int> a(n + 1), b(n + 1);
    for (int i = 1;i <= n;i++)cin >> a[i];
    for (int i = 1;i < n;i++)cout << a[i + 1];
    cout << a[1] << ' ';cout << '\n';
}

C. Perform Operations to Maximize Score

给你一个长度为 n 的数组 a 和一个整数 k 。同时给你一个长度为 n 的二进制数组 b

您最多可以执行以下操作 k 次:

您的分数定义为 maxi=1n(ai+median(ci)) ,其中 ci 表示从 a 中删除 ai 后得到的长度为 n1 的数组。

找出如果以最佳方式进行运算,你能得到的最高分。

Solution

这个题目我赛时思路完全正确的,不知道哪里错误了。

思路:只有两种情况:

打完牛客周赛 55 继续补