题目链接:http://codeforces.com/contest/1348
思路:分成两部分,一部分里面的和先置为最大的2^n,然后另一部分置为2^(n-1),然后将1~n-2拆分,前一半分到2^n那部分去,剩余的另一半分给2^(n-1)那部分
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <list> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; typedef double db; typedef long long ll; ll qmi(int m, int k) { int res = 1, t = m; while (k) { if (k&1) res = res * t; t = t * t; k >>= 1; } return res; } int main() { #ifdef ONLINE_JUDGE #else freopen("in.txt","r",stdin); #endif int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); if(n==2) { printf("2\n"); continue; } ll a[50],b=0,c=0; for(int i=1;i<=n;i++) { a[i]=qmi(2, i); } b=a[n]; c=a[n-1]; for(int i=1;i<=(n-2)/2;i++) { b+=a[i]; } for(int i=(n-2)/2+1;i<=(n-2);i++) { c+=a[i]; } printf("%lld\n",abs(b-c)); } return 0; }
思路:既然要求每k个子序列的和都一致,那么先求出不同数的个数,如果比k大,那么肯定不存在输出“-1”,存在的话找出k个数输出n遍即可,如果不同数的个数小于k,记不同数的数组为b,长度为len ,那么在后面添加k-len个b[0]即可,输出n遍
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <list> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; typedef double db; typedef long long ll; const int maxn=2e5+10; int main() { #ifdef ONLINE_JUDGE #else freopen("in.txt","r",stdin); #endif int t; scanf("%d",&t); while(t--) { int n,k; scanf("%d%d",&n,&k); int a[105]; for(int i=0;i<n;i++) scanf("%d",a+i); map<int,int>m; for(int i=0;i<n;i++) m[a[i]]++; if(k<m.size()) printf("-1\n"); else{ printf("%d\n",n*k); int b[maxn]; int ops=0; for(auto ss:m){ b[ops++]=ss.first; } int num=ops; for(int i=0;i<k-num;i++) { b[ops++]=b[0]; } for(int i=0;i<=n-2;i++) { for(int j=0;j<ops;j++) { printf("%d ",b[j]); } } for(int j=0;j<ops;j++) { if(j==ops-1) printf("%d\n",b[j]); else printf("%d ",b[j]); } } } return 0; }
Codeforces Round #638 (Div. 2)
原文:https://www.cnblogs.com/Vampire6/p/12818158.html