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;
}