站外题求助
  • 板块学术版
  • 楼主xiaoshumiao
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/2/29 17:56
  • 上次更新2024/2/29 20:39:07
查看原帖
站外题求助
1008513
xiaoshumiao楼主2024/2/29 17:56

rt

感觉复杂度没问题,为啥会 T。

#include<cstdio>
using namespace std;
int n,m,k,ans,add;
int a[20],reans[1000010][20],p[1000010];
bool tong[1000010];
bool check() {
  for(int i=n+1;i<=n*2;i++) a[i]=a[i-n];
  for(int i=1;i<=2*n;i++) p[i]=p[i-1]+a[i];
  for(int i=1;i<=p[2*n];i++) tong[i]=false;
  for(int i=1;i<=n;i++)
    for(int j=i;j<=i+n-1;j++) tong[p[j]-p[i-1]]=true;
  int i=m;
  while(tong[i]) i++;
  i--;
  if(i>ans) { add=0; ans=i; return true;}
  return i==ans;
}
int main() {
  scanf("%d %d %d",&n,&m,&k);
  if(n==5) {
    for(a[1]=k;a[1]<=m;a[1]++)
      for(a[2]=a[1];a[2]<=k+15;a[2]++)
        for(a[3]=a[1];a[3]<=k+15;a[3]++)
          for(a[4]=a[1];a[4]<=k+15;a[4]++)
            for(a[5]=a[1];a[5]<=k+15;a[5]++)
              if(check()) {
                add++;
                for(int i=1;i<=5;i++) reans[add][i]=a[i];
              }
  }
  else {
    for(a[1]=k;a[1]<=m;a[1]++)
      for(a[2]=a[1];a[2]<=k+15;a[2]++)
        for(a[3]=a[1];a[3]<=k+15;a[3]++)
          for(a[4]=a[1];a[4]<=k+15;a[4]++)
            for(a[5]=a[1];a[5]<=k+15;a[5]++)
              for(a[6]=a[1];a[6]<=k+15;a[6]++)
                if(check()) {
                  add++;
                  for(int i=1;i<=6;i++) reans[add][i]=a[i];
                }
  }
  printf("%d\n",ans);
  for(int i=1;i<=add;i++) {
    for(int j=1;j<=n;j++) printf("%d ",reans[i][j]);
    puts("");
  }
  return 0;
}
2024/2/29 17:56
加载中...