HUST 1353 Dartboard
生活随笔
收集整理的這篇文章主要介紹了
HUST 1353 Dartboard
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
構造。應該有多種構造方法。做的時候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
總結
以上是生活随笔為你收集整理的HUST 1353 Dartboard的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端库
- 下一篇: 如何在修改了默认值之后跟新