Atcoder agc041简要题解

A - Table Tennis Training

B - Voting Judges

C - Domino Quality

N ≤ 3 N\leq 3 N3时特判。
经过一些尝试,可以在 N = 4 , 5 , 6 , 7 N=4,5,6,7 N=4,5,6,7时都构造出每行每列恰有 3 3 3个的方案,具体构造的方案可以看代码。注意到在 N N N的一个每行每列恰有 3 3 3个的方案右下方放一个 N = 4 N=4 N=4的方案,就可以得到一个 N + 4 N+4 N+4的每行每列恰有 3 3 3个的方案,于是可以对 N ≥ 4 N\geq 4 N4的所有 N N N构造出每行每列恰有 3 3 3个的方案。
时间复杂度 O ( N 2 ) \mathcal O(N^2) O(N2)

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const char* sol3[3]={
   "aab","c.b","cdd"};
const char* sol4[4]={
   "aacd","bbcd","efgg","efhh"};
const char* sol5[5]={
   "aabbc","dee.c","d..fg","h..fg","hiijj"};
const char* sol6[6]={
   "aabbc.","ddeec.",".f.g.h",".f.g.h","i.j.kk","i.j.ll"};
const char* sol7[7]={
   "aa.bb.c",".dd..ec","f.gg.e.","f...h.i",".j..h.i","kj..ll.","k.mm.nn"};

char ans[1005][1005];

int main() {
   
  int n;
  scanf("%d",&n);
  if (n<=2) {
   
  	puts("-1");
  	return 0;
  }
  if (n==3) {
   
  	for(int i=0;i<3;i++) puts(sol3[i]);
  	return 0;
  }
  for(int i=0;i<n;i++)
    for(int j=0;j<n;j++) ans[i][j]='.';
  int d=0;
  while (n-d>=8) {
   
  	for(int i=0;i<4;i++)
  	  for(int j=0;j<4;j++) ans[d+i][d+j]=sol4[i][j];
  	d+=4;
  }
  if (n-d==4) {
   
  	for(int i=0;i<4;i++)
  	  for(int j=0;j<4;j++) ans[d+i][d+j]=sol4[i][j];
  }
  else if (n-d==5) {
   
  	for(int i=0;i<5;i++)
  	  for(int j=0;j<5;j++) ans[d+i][d+j]=sol5[i][j];
  }
  else if (n-d==6) {
   
  	for(int i=0;i<6;i++)
  	  for(int j=0;j<6;j++) ans[d+i][d+j]=sol6[i][j];
  }
  else {
   
  	for(int i=0;i<7;i++)
  	  for(int j=0;j<7;j++) ans[d+i][d+j]=sol7[i][j];
  }
  for(int i=0;i<n;i++) puts(ans[i]);
  return 0;
} 

D - Problem Scores

显然只用考虑 K = ⌊ N − 1 2 ⌋ K=\lfloor \frac{N-1}{2}\rfloor K=2N1即可。
假设 N N N是偶数(奇数类似),那么条件等价于 ∑ i = 1 K ( A N − K + i − A N − K − i ) < A 1 \sum_{i=1}^{K}(A_{N-K+i}-A_{N-K-i})< A_1 i=1K(ANK+iANKi)<A1
考虑DP,设 F [ i ] [ j ] [ k ] F[i][j][k] F[i][j][k]表示考虑到 i i i,确定了 N − K − i N-K-i NKi N − K + i N-K+i NK+i之间的相对顺序, A N − K + i − A N − K − i = j A_{N-K+i}-A_{N-K-i}=j ANK+iANKi=j ∑ l = 1 i ( A N − K + l − A N − K − l ) = k \sum_{l=1}^{i}(A_{N-K+l}-A_{N-K-l})=k

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值