繋がらない人のブログ

こうせん-つくば

SuperCon2013 予選通過!(13-07-09:最近のメニュー)

SuperCon2013予選通過しました!
コード書いたら通りました。
チームは@Pelkira @Chigichan24 1年生(研修目的)ですねー。
チーム:AkaKDanCとして西日本から参加します。
高速化はちょいちょい楽しいですね。
自分としてはなんの工夫もせず再帰組んでたらフラグ立てとか云々で部の他の子よりだいぶ速かったみたい。
データ1000個とか入れて10msとかだったんだが5個でどうやって差つけてるんでしょう。
何回もやってんのかな。N個とかにしときゃいいんじゃとも思いましたが。
SuperCon楽しみですねー。2012,2013と出場できるのは幸せです。

相方のSuperCon記事

#include<stdio.h>
#include"sc13.h"
int pel[30];
int depth = 0;
int max = -1000000;
void dfs(int now,int ans,int dep,int *path,int *data,int *flg){
    int i,x,y;
    if(now == 29){
        if(ans > max){
            int p;
            max = ans;
            depth = dep + 1;
            path[depth-1] = 29;
            p = depth;
            while(p--)pel[p] = path[p];
            pel[0] = path[0];
        }
        return;
    }

    x = now + data[now];
	if(x >= 30)x -= 30;
    if(!flg[x]){
        path[dep] = now;
        y = ans + data[now];
        flg[x] = 1;
        dfs(x,y,dep+1,path,data,flg);
        flg[x] = 0;
    }
    x = now - data[now] ;
	if(x < 0) x += 30;
    if(!flg[x]){
        path[dep] = now;
        y = ans - data[now];
        flg[x] = 1;
        dfs(x,y,dep+1,path,data,flg);
        flg[x] = 0;
    }
    return;
}
int main(void){
    int path[30]={0};
    int flg[30]={1};
    int data[30];
    int i,q=5;
    while(q--){
    	max = -1000000;
        depth = 0;
        for(i=0;i<30;i++)scanf("%d",&data[i]);
        dfs(0,0,0,path,data,flg);
        sc_output(depth,pel);
    }
    return 0;
}