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