cf956

发布于:2024-08-16 ⋅ 阅读:(92) ⋅ 点赞:(0)

A. Find K Distinct Points with Fixed Center

题意:找到k个不同的坐标,并且这些坐标的中心为x,y,求这些不同的坐标。

分析:先求出对称坐标,然后再求剩下一至俩个坐标相加满足x×k,y×k

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void sol(){
    ll x,y,k;cin>>x>>y>>k;
    x=x*k,y=y*k;
    ll a[10100],b[10100];
    a[1]=1999999,b[1]=19999999;
    if(k%2!=0){
        for(int i=2;i<k;i++){
            if(i%2==0){
                a[i]=-a[i-1];
                b[i]=-b[i-1];
            }
            else{
                a[i]=-a[i-1]-1;
                b[i]=-b[i-1]-1;
            }
        }
        a[k]=x,b[k]=y;
    }
    else{
        for(int i=2;i<k-1;i++){
            if(i%2==0){
                a[i]=-a[i-1];
                b[i]=-b[i-1];
            }
            else{
                a[i]=-a[i-1]-1;
                b[i]=-b[i-1]-1;
            }
        }
        if(x!=0)a[k-1]=0,a[k]=x;
        else a[k-1]=1,a[k]=-1;
        if(y!=0)b[k-1]=0,b[k]=y;
        else b[k-1]=-1,b[k]=1;
    }
    for(int i=1;i<=k;i++){
        cout<<a[i]<<" "<<b[i]<<endl;
    }
}
int main(){
    int t;cin>>t;
    while(t--)sol();
    return 0;
}

B. Minimize Equal Sum Subarrays

题意:给定一个数组p,找到一个数组q,使得

$$
使 pi+pi+1+…+pj=qi+qi+1+…+qj 的成对数 ( i,j ) ( 1≤i≤j≤n ) 最小。
$$

分析:直接错位往前一格即可。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void sol(){
    int n;cin>>n;ll p[n+10];
    ll sum[n+10];
    for(int i=1;i<=n;i++)cin>>p[i];
    for(int i=2;i<=n;i++)cout<<p[i]<<" ";
    cout<<p[1]<<endl;
​
}
int main(){
    int t;cin>>t;
    while(t--)sol();
    return 0;
}