2020牛客暑期多校训练营(第六场)
额,睡了一下午,直接错过了比赛。。。
文章目录
A African Sort
题意:
题解:
代码:
B Binary Vector
C Combination of Physics and Maths
题意:
一个矩阵的底面积定义为最后一行的数的和,重量定义为矩阵内所有数的和(含最后一行),给一个正整数矩阵,找一个压强(压强等于重量/面积)最大的可非连续子矩阵
题解:
其实单列矩阵就是最大情况
如果一个子矩阵有多列,那么可以拆成两个行数不变的更小子矩阵,且其中一个一定不比原情况差
证明:
所以我们只需要求出每一列矩阵的压强值,从上到下选入所以元素
代码:
#include<iostream>
#include<cstdio>
using namespace std;
const int MAX_N=210;
int a[MAX_N][MAX_N];
int sum[MAX_N][MAX_N];
int main(void){
int T,n,m,i,j;
cin>>T;
while(T--){
scanf("%d%d",&n,&m);
double maxl=0;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
scanf("%d",&a[i][j]);
sum[i][j]=sum[i-1][j]+a[i][j];
//求以a[i][j]为底,的压强
maxl=max(maxl,1.0*sum[i][j]/(1.0*a[i][j]));
}
}
printf("%.8f\n",maxl);
}
return 0;
}
D Data structure
E Easy Construction
题意:
给定n,k,问是否可以构造一个1 ~ n的排列p,使得对于1 ~ n中任意的数i,p都存在一个长度为i的子区间,其和模n余k。有解输出任意一组
题解:
当i=n时,也就是子区间为整个p时,如果此时模n不余k,那就说明无解,如果余k就说明存在解
换句话也就是n*(n+1)/2%n==k
当k满足条件时,存在解。
如果n为奇数,那k=0;(因为(n+1)/2肯定为偶数,那n的偶数倍模n肯定为0),那p可以为{n,1,n-1,2,n-2,…}。这样无论i为几,选i个数之和都是n的倍数
如果n为偶数,那k=n/2,那p可以为{n,n/2,1,n-1,2,n-2,…}
本题关键在于n如果确定,k也相应的确定,那p就好确定
代码:
#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define llu unsigned ll
#define ld long double
#define pr make_pair
#define pb push_back
#define lc (cnt<<1)
#define rc (cnt<<1|1)
//#define len(x) (t[(x)].r-t[(x)].l+1)
#define tmid ((l+r)>>1)
#define max(x,y) (x)>(y)?(x):(y)
#define min(x,y) (x)>(y)?(y):(x)
using namespace std;
const int inf=0x3f3f3f3f;
const ll lnf=0x3f3f3f3f3f3f3f3f;
const double dnf=1e18;
const int mod=998244353;
const double eps=1e-1;
const double pi=acos(-1.0);
const int hp=13331;
const int maxn=100100;
const int maxp=1100;
const int maxm=4000100;
const int up=100000;
int a[maxn],ans[maxn];
int main(void)
{
int n,k;
scanf("%d%d",&n,&k);
int sum=0;
for(int i=1;i<=n;i++)
{
a[i]=i;
sum+=i;
}
if(sum%n!=k)
{
printf("-1\n");
return 0;
}
int cnt=0;
int l=1,r=n-1;
bool flag=true;
while(cnt<n-1)
{
if(flag)
a[++cnt]=l++,flag^=1;
else
a[++cnt]=r--,flag^=1;
}
a[++cnt]=n;
for(int i=1;i<=n;i++)
{
if(i!=1) putchar(' ');
printf("%d",a[i]);
}
return 0;
}