NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » joe59491 的個人資料 » 顯示文章
 文章

顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。

文章 - joe59491

頁: [1] 2
1
NPSC2010國中組決賽 / Re: [Pascal]G.失落的维京战机
« 於: 一月 01, 2013, 02:31:43 pm »
參考了一下這裡的:http://www.csie.ntnu.edu.tw/~u91029/programming.html
使用g++來節省自己運算的麻煩,不過ZJ上無法使用system指令(不過NPSC好像可以用歐?!)
代碼: [選擇]
#include<stdlib.h>
#include<stdio.h>
int main(){
int T;
scanf("%d",&T);
while(T--){
char s[10000];
scanf("%s",s);
FILE *out;
out=fopen("tmp.cpp", "w");
fprintf(out,"#include <cstdio>\n");
fprintf(out,"int main(){\n");
fprintf(out," printf(\"%%d\\n\",(%s));\n",s);
fprintf(out,"   return 0;\n");
fprintf(out," }\n");
fclose(out);
system("g++ tmp.cpp -o tmp.exe");
system("tmp.exe");
}
return 0;
}
[\code]

2
NPSC2012國中組決賽 / Re: D、蚯蚓王
« 於: 十二月 11, 2012, 01:07:42 pm »
這是排序版本的~
代碼: [選擇]
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
#include<map>
using namespace std;
int ar[2000];
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int N;
        scanf("%d",&N);
        for(int i=0;i<N;i++){
            scanf("%d",&ar[i]);
            }
        sort(ar,ar+N);
        int ans=-1,k=ar[0],l=0;
        for(int i=0;i<N;i++){
            if(ar[i]==k)l++;
            else{
                if(l>(N>>1))ans=ar[i-1];
                l=1;k=ar[i];
                }
            }
        if(l>(N>>1))ans=ar[N-1];
        printf("%d\n",ans);
        }
    return 0;
    }

3
NPSC2012國中組決賽 / Re: C、蚯與地下城
« 於: 十二月 11, 2012, 07:00:35 am »
我也很好奇棋盤是哪個單位贊助的?
話說第一名的另一份獎品呢?(主辦單位應該準備了兩份吧?)

4
NPSC2012國中組決賽 / Re: C、蚯與地下城
« 於: 十二月 09, 2012, 11:13:32 am »
是滴。
---
話說我寫完這題時,看那遞迴函式這麼短,感覺好像是少了什麼,所以我就想說不會過...
然後突然看到team1又拿了一顆氣球...嚇到了(我之前錯太多次,時間加太多,同題數的話很容易輸...)
所以就乾脆不檢查直接送出去了
結果送出去後就得到了綠綠的Yes...
---
話說遞迴太深就會爆了...

5
NPSC2012國中組決賽 / A、烤餅乾
« 於: 十二月 08, 2012, 10:26:38 pm »
直接硬幹即可?!
代碼: [選擇]
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
using namespace std;
int chk(int a,int b,int c){
    if(c<a||c<b)return 0;
    if((a+b)<=c)return 0;
    return 1;
    }
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int a;
        scanf("%d",&a);
        int ans=0;
        for(int i=1;i<a;i++){
            for(int j=i;j<a;j++){
                    if(chk(i,j,a-i-j))ans++;
                }
            }
        printf("%d\n",ans);
        }
    return 0;
    }

6
NPSC2012國中組決賽 / B、菇菇園
« 於: 十二月 08, 2012, 10:26:01 pm »
用queue來記錄順序
代碼: [選擇]
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
#include<queue>
using namespace std;
struct co{
    int x,y;
    }c[2005];
int chk[2005],p;
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int N,M,K;
        scanf("%d%d%d",&N,&M,&K);
        queue<int>q;
        memset(chk,0,sizeof(chk));p=0;
        for(int i=0;i<N;i++){
            scanf("%d%d",&c[i].x,&c[i].y);
            if(i<M){
                q.push(i);p++;chk[i]=1;
                }
            }
        while(!q.empty()){
            int now=q.front();q.pop();
            for(int i=0;i<N;i++){
                if(((c[i].x-c[now].x)*(c[i].x-c[now].x)+(c[i].y-c[now].y)*(c[i].y-c[now].y))<(K*K)){
                    if(chk[i]==0){
                        q.push(i);chk[i]=1;p++;
                        }
                    }
                }
            }
        printf("%d\n",p);
        }
    return 0;
    }

7
NPSC2012國中組決賽 / C、蚯與地下城
« 於: 十二月 08, 2012, 10:24:48 pm »
DP+DFS?(我其實不確定我怎麼解出來的...)
代碼: [選擇]
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
#include<list>
using namespace std;
struct node{
    int pay;
    list<int>way;
    }n[1000];
int F(int i){
    list<int>::iterator it;
    int j;
    for(it=n[i].way.begin(),j=0;it!=n[i].way.end();it++,j++){
        if(n[*it].pay>(n[i].pay+j)){
            n[*it].pay=n[i].pay+j;
            F(*it);
            }
        }
    }
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int N,M;
        scanf("%d%d",&N,&M);
        for(int i=0;i<N;i++){
            n[i].pay=0x7FFFFFFF;
            n[i].way.clear();
            }
        for(int i=0;i<M;i++){
            int a,b;
            scanf("%d%d",&a,&b);
            n[a-1].way.push_back(b-1);
            }
        for(int i=0;i<N;i++){
            n[i].way.sort();
            }
        n[0].pay=0;
        F(0);
        printf("%d\n",n[N-1].pay==0x7FFFFFFF?-1:n[N-1].pay);
        }
    return 0;
    }

8
NPSC2012國中組決賽 / D、蚯蚓王
« 於: 十二月 08, 2012, 10:23:08 pm »
這其實先排序過後再解會更好...(不用map)
代碼: [選擇]
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
#include<map>
using namespace std;
int nlis[2000],p;
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int N,tmp;
        scanf("%d",&N);p=0;
        map<int,int> tlis;
        for(int i=0;i<N;i++){
            scanf("%d",&tmp);
            if(tlis[tmp]==0){
                nlis[p]=tmp;
                p++;
                tlis[tmp]=1;
                }
            else{
                tlis[tmp]++;
                }
            }
        int ans=-1;
        for(int i=0;i<p;i++){
            if(tlis[nlis[i]]>(N>>1))ans=nlis[i];
            }
        printf("%d\n",ans);
        }
    return 0;
    }

9
NPSC2012國中組決賽 / E、黑與白
« 於: 十二月 08, 2012, 10:22:00 pm »
這題就一身高排序後,算一下就過了
代碼: [選擇]
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
using namespace std;
struct people{
       int h,c;
       }p[1000];
bool cmp(people a,people b){
    if(a.h>b.h)return 1;
    return 0;
    }
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int N,tb=0;
        scanf("%d",&N);
        for(int i=0;i<N;i++){
            scanf("%d%d",&p[i].h,&p[i].c);
            if(p[i].c)tb++;
            }
        int ans=0;
        sort(p,p+N,cmp);
        int hb=0,hw=0,eb=tb,ew=N-tb;
        for(int i=0;i<N-1;i++){
            if(p[i].c==0)hw++,ew--;
            if(p[i].c==1)hb++,eb--;
            if(p[i].h!=p[i+1].h){
                if((ew+hb)>ans)ans=ew+hb;
                if((eb+hw)>ans)ans=eb+hw;
                }
            }
        printf("%d\n",ans);
        }
    return 0;
    }

10
NPSC2012國中組決賽 / F、社群網路
« 於: 十二月 08, 2012, 10:16:03 pm »
這題我是把每個點的邊都找兩個兩個來檢查
代碼: [選擇]
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
#include<list>
using namespace std;
int ls[300][300];
int gcd(int a,int b){
    while(b!=0){
        a%=b;
        swap(a,b);
        }
    return a;
    }
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        list<int>lis[300];
        list<int>::iterator it1,it2;
        memset(ls,0,sizeof(ls));
        int N,M;
        scanf("%d%d",&N,&M);
        int tri=0,lin=0;
        for(int i=0;i<M;i++){
            int a,b;
            scanf("%d%d",&a,&b);
            lis[a-1].push_back(b-1);
            lis[b-1].push_back(a-1);
            ls[a-1][b-1]=1;
            ls[b-1][a-1]=1;
            }
        for(int i=0;i<N;i++){
            for(it1=lis[i].begin();it1!=lis[i].end();it1++){
                for(it2=it1,it2++;it2!=lis[i].end();it2++){
                    lin++;
                    if(ls[*it1][*it2])tri++;
                    }
                }
            }
        int g=gcd(tri,lin);
        printf("%d/%d\n",tri/g,lin/g);
        }
    return 0;
    }

11
NPSC2012國中組決賽 / G、蚯蚓的卡片
« 於: 十二月 08, 2012, 10:14:26 pm »
這題我覺得根本是在找bug花了一大堆時間...(換行和空格就夠麻煩了...)
我的解法是開個大陣列,從中間開始填,填完後再填空白。
代碼: [選擇]
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
using namespace std;
char map[1000][1000];
char s[10000];
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%s",s);
        memset(map,0,sizeof(map));
        int len=strlen(s),x=500,y=500,v=4;//1 right , 2 left , 3 up , 4 down
        for(int i=0;i<len;i++){
            map[y][x]=s[i];
            if(v==1){
                if(map[y-1][x]==0)v=3,y--;
                else x++;
                }
            else if(v==2){
                if(map[y+1][x]==0)v=4,y++;
                else x--;
                }
            else if(v==3){
                if(map[y][x-1]==0)v=2,x--;
                else y--;
                }
            else if(v==4){
                if(map[y][x+1]==0)v=1,x++;
                else y++;
                }
            }
        int sx=500,sy=500,ex=500,ey=500;
        for(int i=0;i<1000;i++){
            for(int j=0;j<1000;j++){
                if(map[i][j]!=0){
                    if(i<sx){sx=i;}
                    if(i>ex){ex=i;}
                    if(j<sy){sy=j;}
                    if(j>ey){ey=j;}
                    }
                }
            }
        for(int i=sx;i<=ex;i++){
            for(int j=sy;j<ey;j++){
                if(map[i][j]=='\0'){
                    map[i][j]=' ';
                    }
                else break;
                }
            }
        for(int i=sx;i<=ex;i++){
            printf("%s\n",map[i]+sy);
            }
        puts("");
        }
    return 0;
    }

12
NPSC2011國中組決賽 / Re: E、天王星計畫
« 於: 四月 26, 2012, 12:55:29 pm »
上面的有bug
這裡是改過的
代碼: [選擇]
/**********************************************************************************/
/*  Problem: a377 "E. 天王星計畫" from 2011 NPSC 國中組決賽             */
/*  Language: CPP (3188 Bytes)                                                    */
/*  Result: AC(3.9s, 500KB) judge by this@ZeroJudge                               */
/*  Author: qazwsxedcrfvtg14 at 2012-04-25 13:10:26                               */
/**********************************************************************************/
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int map[500][500];
int mmap[500][500];
int main(){
    int a,b,c,d,e,f,g,h,i,j,k,l;
    int mx,my,bx,by,D,x,y;
    scanf("%d",&a);
    for(b=0;b<a;b++){
scanf("%d%d%d%d%d%d%d",&x,&y,&mx,&my,&bx,&by,&D);
mx--;my--;bx--;by--;
for(c=0;c<y;c++){
for(d=0;d<x;d++){
scanf("%d",&map[c][d]);
}
}
for(c=0;c<y;c++){
for(d=0;d<x;d++){
mmap[c][d]=999999999;
}
}
mmap[my][mx]=0;
for(l=0;l<1000;l++){
for(c=0;c<y;c++){
for(d=0;d<x;d++){
if(mmap[c][d]!=999999999){
if(c+1<y){
g=map[c+1][d]-map[c][d];
if(g<0){g*=-1;}
if(g>D){h=1+mmap[c][d];}
else{h=mmap[c][d];}
if(h<mmap[c+1][d]){mmap[c+1][d]=h;}
}
if(c-1>=0){
g=map[c-1][d]-map[c][d];
if(g<0){g*=-1;}
if(g>D){h=1+mmap[c][d];}
else{h=mmap[c][d];}
if(h<mmap[c-1][d]){mmap[c-1][d]=h;}
}
if(d+1<x){
g=map[c][d+1]-map[c][d];
if(g<0){g*=-1;}
if(g>D){h=1+mmap[c][d];}
else{h=mmap[c][d];}
if(h<mmap[c][d+1]){mmap[c][d+1]=h;}
}
if(d-1>=0){
g=map[c][d-1]-map[c][d];
if(g<0){g*=-1;}
if(g>D){h=1+mmap[c][d];}
else{h=mmap[c][d];}
if(h<mmap[c][d-1]){mmap[c][d-1]=h;}
}


if(c+2<y){
                            h=1+mmap[c][d];
if(h<mmap[c+2][d]){mmap[c+2][d]=h;}
}
if(c-2>=0){
                            h=1+mmap[c][d];
if(h<mmap[c-2][d]){mmap[c-2][d]=h;}
}
if(d+2<x){
                            h=1+mmap[c][d];
if(h<mmap[c][d+2]){mmap[c][d+2]=h;}
}
if(d-2>=0){
                            h=1+mmap[c][d];
if(h<mmap[c][d-2]){mmap[c][d-2]=h;}
}


if(c+1<y&&d+1<x){
                            h=1+mmap[c][d];
if(h<mmap[c+1][d+1]){mmap[c+1][d+1]=h;}
}
if(c-1>=0&&d-1>=0){
                            h=1+mmap[c][d];
if(h<mmap[c-1][d-1]){mmap[c-1][d-1]=h;}
}
if(d+1<x&&c-1>=0){
                            h=1+mmap[c][d];
if(h<mmap[c-1][d+1]){mmap[c-1][d+1]=h;}
}
if(d-1>=0&&c+1<y){
                            h=1+mmap[c][d];
if(h<mmap[c+1][d-1]){mmap[c+1][d-1]=h;}
}


}
}
}
}

/*    for(c=0;c<y;c++){
for(d=0;d<x;d++){
                printf("%d ",mmap[c][d]);
                }
                printf("\n");
            }*/
printf("%d\n",mmap[by][bx]);

}

    return 0;
    }


13
綜合討論區 / Re: 無言中...
« 於: 十二月 14, 2011, 10:26:51 pm »
社團當中之前就是有這樣的情形(很多很多次)
所以才會衝突那麼多
搞到最後很多人都不想管了
各位後輩要記取教訓
可是目前我的學校沒有任何有關程式的社團...他是我找的(報名前他說他對寫程式非常有興趣)結果...

14
綜合討論區 / Re: 無言中...
« 於: 十二月 12, 2011, 11:34:39 pm »
話說我也很好奇國中組的題目 到底難到什麼地步

考完大學 還要回來幫國中 高中學弟妹們準備NPSC呢 ... XD!

NPSC還是難度逐年加深阿 ...

還好我國中還是活在
幾乎每題都能暴力解的情況 ... (2007第4 2008第5 還是滿失常的. 看當年scoreboard就知道了.)


至於 你說你該第一名的 .

其實坦白說 我國一的時候幾乎就有了 (國一下校內賽 就電了學長 ...)

可是我從來都沒拿過第一 (好想去北京阿~~


主要關鍵還是在於 當天比賽的臨場反應

題目沒看清楚 會錯意 還是屬於實力跟經驗的部分

如果會緊張 是正常 每個人都會緊張

只是你以後比賽 一定要學會如何克服 (哼個歌 . 放輕鬆)

這次摔一跤了 不是重點

重點是你有沒有學到經驗

得失心不能太重 ... 會給自己不必要的壓力


我之前的情況跟你滿像的 ... (( 有前3的實力 最後失常


可是 ... 最後我得說

千萬別怪罪到隊友身上

或許他是因素之一

可是 或許他盡力了

程式設計並不是每個人都有天分

他沒有你聰明 並不是他的錯


2007 國中組1隊只有1人 所以都是靠自己

2008 我的隊友 確實實力在我之下

初賽 決賽都有因為他的失誤多了罰時 摔了一點名次

當時我真的有數落他了一頓

可是我後來真的後悔了

因為 把關係搞僵了

他真的也盡了他所能 只是經驗技巧略遜於我

所以現在 我不太會譴責隊友了


這次比賽 其實隊友也是有點小失誤

可是 誰不會犯錯 對吧 ... ?

話說這次的隊友是太誇張了...報完名就很少動程式了...感覺不是很好(好像是故意來考加分的樣子..)...
雖然我也錯在不該找他來比...
p.s.這次錯的真的很腦殘...算用同周長所做出最大的三角形面積,我居然用暴力法算(一段一段試O(n^3)),而不是把三邊拿去取平均(O(n))...果然TLE

15
綜合討論區 / Re: 無言中...
« 於: 十二月 11, 2011, 10:30:31 pm »
這次第一名只解3題...

我到想看看題目是什麼 :o

說穿了都很簡單,但是當場都呆掉,忘記怎麼寫,結果我會的五題中只過了兩題,第一名飛了(烤熟的兔子跑了...)...
(又因為另一個隊友弱爆了,沒辦法跟他討論...)

16
綜合討論區 / 無言中...
« 於: 十二月 10, 2011, 11:15:34 pm »
這次NPSC的題目回家後,仔細看看,發現錯了很多很白痴的東西...
有的是題目沒看清楚;
有個是題目想到別的東西去了;
有的是搞錯題目的意思.
解果只解了兩題...落得沒進前三的下場...

17
NPSC2011國中組決賽 / F、田忌賽馬外傳
« 於: 十二月 10, 2011, 11:07:30 pm »
這題,好像有在我的國文參考書上出現過,而在寫國文時有仔細想過,所以解比較快...(這不是重點)。
回到正題,這題就是先排序好,我方挑最好的N匹馬,敵方挑最爛的N匹馬,然後比較

程式碼:
代碼: [選擇]
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int me[2000000],he[2000000];
int main(){
    int a,b,c,d,e,g,h,i,j,k,l,f;
    scanf("%d",&a);
    for(b=0;b<a;b++){
scanf("%d%d",&c,&d);
for(e=0;e<c;e++){
scanf("%d",&me[e]);
}
for(e=0;e<c;e++){
scanf("%d",&he[e]);
}
sort(&me[0],&me[c]);
sort(&he[0],&he[c]);
f=0;
for(e=0;e<d;e++){
if(me[e+(c-d)]<=he[e]){if(f<(he[e]-me[e+(c-d)]+1)){f=(he[e]-me[e+(c-d)]+1);}}
}
printf("%d\n",f);
}
    return 0;
    }

18
NPSC2011國中組決賽 / E、天王星計畫
« 於: 十二月 10, 2011, 11:02:19 pm »
這題我是用先建一張到每個地點最小需要光束的圖,然後再取出來就好了。
沒有想到光束可以用在距離為二且差小於2D時,可以放在中間踩著它跳過去...

程式碼:
代碼: [選擇]
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int map[500][500];
int mmap[500][500];
int main(){
    int a,b,c,d,e,f,g,h,i,j,k,l;
    int mx,my,bx,by,D,x,y;
    scanf("%d",&a);
    for(b=0;b<a;b++){
scanf("%d%d%d%d%d%d%d",&x,&y,&mx,&my,&bx,&by,&D);
mx--;my--;bx--;by--;
for(c=0;c<y;c++){
for(d=0;d<x;d++){
scanf("%d",&map[c][d]);
}
}
for(c=0;c<y;c++){
for(d=0;d<x;d++){
mmap[c][d]=99999999;
}
}
mmap[my][mx]=0;
for(l=0;l<1000;l++){
for(c=0;c<y;c++){
for(d=0;d<x;d++){
if(mmap[c][d]!=99999999){
if(c+1<y){
g=map[c+1][d]-map[c][d];
if(g<0){g*=-1;}
if(g>D){h=1+mmap[c][d];}
else{h=mmap[c][d];}
if(h<mmap[c+1][d]){mmap[c+1][d]=h;}
}
if(c-1>=0){
g=map[c-1][d]-map[c][d];
if(g<0){g*=-1;}
if(g>D){h=1+mmap[c][d];}
else{h=mmap[c][d];}
if(h<mmap[c-1][d]){mmap[c-1][d]=h;}
}
if(d+1<x){
g=map[c][d+1]-map[c][d];
if(g<0){g*=-1;}
if(g>D){h=1+mmap[c][d];}
else{h=mmap[c][d];}
if(h<mmap[c][d+1]){mmap[c][d+1]=h;}
}
if(d-1>=0){
g=map[c][d-1]-map[c][d];
if(g<0){g*=-1;}
if(g>D){h=1+mmap[c][d];}
else{h=mmap[c][d];}
if(h<mmap[c][d-1]){mmap[c][d-1]=h;}
}

//以下是我決賽忘解寫的地方...

if(c+1<y&&d+1<x){
g=map[c+1][d+1]-map[c][d];
if(g<0){g*=-1;}
if(g<=2*D){h=1+mmap[c][d];}
else{h=99999999;}
if(h<mmap[c+1][d+1]){mmap[c+1][d+1]=h;}
}

if(c+1<y&&d-1>=0){
g=map[c+1][d-1]-map[c][d];
if(g<0){g*=-1;}
if(g<=2*D){h=1+mmap[c][d];}
else{h=99999999;}
if(h<mmap[c+1][d-1]){mmap[c+1][d-1]=h;}
}

if(c-1>=0&&d+1<x){
g=map[c-1][d+1]-map[c][d];
if(g<0){g*=-1;}
if(g<=2*D){h=1+mmap[c][d];}
else{h=99999999;}
if(h<mmap[c-1][d+1]){mmap[c-1][d+1]=h;}
}

if(c-1>=0&&d-1>=0){
g=map[c-1][d-1]-map[c][d];
if(g<0){g*=-1;}
if(g<=2*D){h=1+mmap[c][d];}
else{h=99999999;}
if(h<mmap[c-1][d-1]){mmap[c-1][d-1]=h;}
}

if(c+2<y){
g=map[c+2][d]-map[c][d];
if(g<0){g*=-1;}
if(g<=2*D){h=1+mmap[c][d];}
else{h=99999999;}
if(h<mmap[c+2][d]){mmap[c+2][d]=h;}
}

if(c-2>=0){
g=map[c-2][d]-map[c][d];
if(g<0){g*=-1;}
if(g<=2*D){h=1+mmap[c][d];}
else{h=99999999;}
if(h<mmap[c-2][d]){mmap[c-2][d]=h;}
}

if(d+2<x){
g=map[c][d+2]-map[c][d];
if(g<0){g*=-1;}
if(g<=2*D){h=1+mmap[c][d];}
else{h=99999999;}
if(h<mmap[c][d+2]){mmap[c][d+2]=h;}
}

if(d-2>=0){
g=map[c][d-2]-map[c][d];
if(g<0){g*=-1;}
if(g<=2*D){h=1+mmap[c][d];}
else{h=99999999;}
if(h<mmap[c][d-2]){mmap[c][d-2]=h;}
}

//到此為止

}
}
}
}

printf("%d\n",mmap[by][bx]);

}

    return 0;
    }

19
NPSC2011國中組決賽 / D、簡單題的逆襲
« 於: 十二月 10, 2011, 10:52:06 pm »
這題因為A,B,C越平均越好,所以又先算總和的三分之一,在分別從前跟後找出最接近三分之一的總和,把那附近的值試一下,就行了!   果真是『簡單題』的逆襲

程式碼:
代碼: [選擇]
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;

double area(int A,int B,int C){
double S=((double)(A+B+C))/2;
return sqrt(S*(S-(double)A)*(S-(double)B)*(S-(double)C));
}
int main(){
    int a,b,c,d,e,f,g,h,i,j,k,l,dou,total,doub,ar[200];
    double A,tot,doubl;
    scanf("%d",&a);
    for(b=0;b<a;b++){
scanf("%d",&c);total=0;
for(d=0;d<c;d++){
scanf("%d",&ar[d]);
total+=ar[d];
}
tot=((double)total)/3;//找三段平均
dou=0;
for(d=0;d<c;d++){
dou+=ar[d];
if((double)dou>=tot){break;}
}
i=d;
doub=0;
for(d=c-1;d>i;d--){
doub+=ar[d];
if(d==i+1){break;}
if((double)doub>=tot){break;}
}
j=d;
A=0;
doubl=area(dou,total-dou-doub,doub);
if(doubl>A){A=doubl;}
doubl=area(dou-ar[i],total-dou-doub+ar[i],doub);
if(doubl>A){A=doubl;}
doubl=area(dou,total-dou-doub+ar[j],doub-ar[j]);
if(doubl>A){A=doubl;}
doubl=area(dou-ar[i],total-dou-doub+ar[j]+ar[i],doub-ar[j]);
if(doubl>A){A=doubl;}
printf("%.2lf\n",A);
}
    return 0;
    }

20
NPSC2011國中組決賽 / C、圈圈國
« 於: 十二月 10, 2011, 10:12:48 pm »
在最後公布解答時,給了個怪怪的解法(找和的眾數)...寫出來長這樣

程式碼:
代碼: [選擇]
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int ar[20000];
int arr[20002];
int main(){
    int a,b,c,d,e,f,g,h,i,j,k,l,m,n;
    scanf("%d",&a);
    for(b=0;b<a;b++){
    scanf("%d",&c);
    for(d=0;d<c;d++){
scanf("%d",&ar[d]);
}l=0;
for(d=0;d<c;d++){
l+=ar[d];
arr[d]=l;
}
sort(&arr[0],&arr[c]);
k=0;l=0;m=arr[0];
for(d=0;d<c;d++){
if(m==arr[d]){k++;}
else{
k=1;m=arr[d];
}
if(k>l){l=k;}
}
printf("%d\n",l);
}
    return 0;
    }

頁: [1] 2