2020牛客多校第六场By Rynar
A.African Sort
B.Binary Vector
const int mod=1e9+7;
const int N=2e7+10;
typedef long long ll;
int a[N],b[N];
int qpow(ll x,int y){
ll ans=1;
while (y){
if (y&1)ans=ans*x%mod;
x=x*x%mod;
y>>=1;
}
return ans;
}
int main(){
int T;
cin>>T;
ll q=2,p=qpow(2,mod-2),t=1;
a[0]=1;b[0]=0;
for (int i=1;i<N;i++){
t=t*p%mod;
a[i]=(q-1)*a[i-1]%mod*t%mod;
q=1ll*q*2%mod;
b[i]=b[i-1]^a[i];
}
int x;
while (T--){
scanf("%d",&x);
printf("%d\n",b[x]);
}
return 0;
}
C.Combination of Physics and Maths
const int N=200+10;
int a[N][N];
int main(){
int T,n,m;
scanf("%d",&T);
while (T--){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
double mx=0,p=0;
for (int i=1;i<=m;i++){
p=0;
for (int j=1;j<=n;j++){
p+=a[j][i];
mx=max(mx,double(p)/a[j][i]);
}
}
printf("%.8lf\n",mx);
}
return 0;
}
D.Data structure
E.Easy Construction
思路:n*(n-1)/2,当n%21时,n*(n-1)/2%n=0,只需n,...,2,n-2,1,n-1后面部分都是两位和为n
当n%20时,n*(n-1)/2%n=n/2,只需把n/2放在第二位,后面部分都是两位和为n
const int N=5000+10;
int a[N];
int main(){
int n,k;
scanf("%d%d",&n,&k);
if (n*(n-1)/2%n!=k){
puts("-1");return 0;
}
a[1]=n;
int cnt=n-1,r=n;
while (r>2){
a[r]=cnt;
a[r-1]=n-cnt;
r-=2;
cnt--;
}
if (n%2==0)a[2]=n/2;
for (int i=1;i<=n;i++){
printf("%d ",a[i]);
}
puts("");
return 0;
}
F.Fibonacci Partition
G.Grid Coloring
int main(){
int T;
int n,k;
scanf("%d",&T);
while (T--){
scanf("%d%d",&n,&k);
if (2*n*(n+1)%k||k==1||n==1){
puts("-1");continue;
}
if(n%k){
int p=1;
for (int i=1;i<=n+1;i++){
for (int j=1;j<=n;j++){
printf("%d ",p);
p=p%k+1;
}
puts("");
}
for (int i=1;i<=n+1;i++){
for (int j=1;j<=n;j++){
printf("%d ",p);
p=p%k+1;
}
puts("");
}
}
else{
for (int i=1;i<=n+1;i++){
for (int j=1;j<=n;j++){
printf("%d ",(i+j-2)%k+1);
}
puts("");
}
for (int i=1;i<=n+1;i++){
for (int j=1;j<=n;j++){
printf("%d ",(i+j-1)%k+1);
}
puts("");
}
}
}
return 0;
}
H.Harmony Pairs
const int mod=1e9+7;
char s[102];
int dp[102][1801][2][2];
ll dfs(int n,int sum,int t,bool lim){
if (!n)return sum>900;
if (~dp[n][sum][t][lim])return dp[n][sum][t][lim];
int up=lim?s[n]-'0':9;
ll ans=0;
for (int i=0;i<=up;i++){//B
for (int j=0;j<=9;j++){//A
if (t&&j>i)continue;
(ans+=dfs(n-1,sum+j-i,t&&(i==j),lim&&(i==up)))%=mod;
}
}
return dp[n][sum][t][lim]=ans;
}
int main(){
memset(dp,-1,sizeof dp);
scanf("%s",s+1);
int len=strlen(s+1);
reverse(s+1,s+1+len);
printf("%d\n",dfs(len,900,1,1));
return 0;
}
I.Interesting Stiriling
J.Josephus Transform
K.K-Bag
禁止类似码农教程的网站爬取,抄袭博客内容。
https://www.cnblogs.com/rair/

浙公网安备 33010602011771号