HUST 1353 Dartboard

本文讨论了构造算法时遇到的问题,包括错误的方法和代码编写技巧。通过实例展示了如何构建算法,解决WA(Wrong Answer)问题,并提供了优化代码的策略。重点介绍了在构建奇数和偶数填充模式时的不同方法,以及如何通过调整边界条件来解决特定问题。此外,还分享了调试过程中的经验和教训,旨在帮助开发者提高算法设计和代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造。应该有多种构造方法。做的时候WA了好几发,怀疑做法是错的,事实上是代码写搓了。。

我是这样构造的:先从上往下左右放奇数,再从下往上左右填偶数

(一)如果n/2是偶数(以12为例) 左边列是内环,右边列是外环

(二)如果n/2是奇数(以10为例) 左边列是内环,右边列是外环

#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue>
#include <stack>
#include <map>
#include<cmath>
#include <vector>
using namespace std;

int a[500],b[500];
int n;
int ans[500];
int tot;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);

        int num=n/2;
        memset(a,0,sizeof a);
        memset(b,0,sizeof b);

        int small=1;
        int large=n-1;
        for(int i=1;i<=(num+1)/2;i++)
        {
            if(i%2==1)
            {
                b[i]=small;
                b[num-i+1]=large;
            }

            else
            {
                a[i]=small;
                a[num-i+1]=large;
            }
            small=small+2;
            large=large-2;
        }

        int x=2;
        for(int i=num;i>=1;i--)
        {
            if(a[i]==0) a[i]=x;
            else b[i]=x;
            x=x+2;
        }

      //  for(int i=1;i<=n/2;i++) printf("%d ",a[i]); printf("\n");
      //  for(int i=1;i<=n/2;i++) printf("%d ",b[i]); printf("\n");

        tot=1;
        for(int i=n/2;i>=1;i--)
        {
            ans[tot]=a[i]; tot++;
            ans[tot]=b[i]; tot++;
        }

        ans[n+1]=ans[1]; ans[n+2]=ans[2];

        int sum=0;
        for(int i=1;i<=n;i++)
            sum=sum+(ans[i]-ans[i+2])*(ans[i]-ans[i+2]);

        for(int i=1;i<=n/2;i++)
            sum=sum+(ans[2*i-1]-ans[2*i])*(ans[2*i-1]-ans[2*i]);

        printf("%d\n",sum);
    }

    return 0;
}

 

转载于:https://www.cnblogs.com/zufezzt/p/5195033.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值