justplay

冥冥之中,让我遇到了你,只因在人群多看了你一眼,我们从此难分难散。
别误会,我没恋爱,这是华为杯程序大赛。没错,哥是不搞算法的,所以看到这个消息,直接忽略了。后来宁哥叫我组队,我就和他一起去玩玩。
第一轮,编程题,一共十道。a~j
开始时候老规矩,撕了。看到了c,思路还比较清晰,开做,结果一个小时过去了,还真出结果了。提交时候说我们超时。无语了,改了半个小时还是不行,果断下一题。发现好多队伍做出来第一题和最后一道,所以我们也转向这两个。一个多小时,都搞定了。然后再看积分榜,队伍做出来g和f,我们做g,一个小时也出来了,但是提交的时候结果不对,草,无语了。这道题思路不难,就是数据很大,好像要用long long int。但是我们还是不对,改了半天,宁哥不放弃c和g,我们想了半天,还是不行,后来也没时间做f了,就走了。当时好像排了20
这一天最好玩的事,每做出来一道题就有工作人员来送气球。我们在最边上,工作人员一给我们送气球,就碰到我们那一排电脑的总开关,我们一共做出来两道题,哪一派的人就陪黑了两次,哈哈,魏鹏的程序都快写完了,咔嚓,丢了。真是,哎~~。
之后初一轮成绩,我们是12名,也难怪,我们刚开始做的c,后来才知道c是最难的,能超时就不错,a,j做的很好,所以排名12,可是,可是,前11名有奖。所以我决定进军第二轮比赛。贪吃蛇。
我在qdctf之后开始做贪吃蛇。这时还有4天比赛截止,有人已经做到18w了。我从周一全天满课,周二例子,周三看基于宽度有瞎按搜索的,分析代码,周四编了半天翘了一节物理。每天晚上没有12点之前睡过。可是思路错了,一个例子跑到6000,一个智能离子跑到3w,我开始想改智能的,后来发现代码写的很不错了,而且当时不会调试,比较坑。然后又该哪个简单的例子,跑到了2w8.就差一点超过智能的。该的过程中由于不会调试肥大劲了。下次一定注意,写代码的不会调试怎么行。最后要交了,我把两个结合起来,也就3w多一点。一般的成绩。结果比赛当晚忐忑半天,结果,万万没想到,两个李涛都获奖了,我知道是主办方的问题,反正都是自家兄第,我也没在意。可是坑了张凌云人开他们。公布成绩才知道,我写的已经不错了,如果主攻自己的代码,不去看智能的,应该能跑到4~5w。强迫症了。量力而行,知己知彼很重要。继续努力!!
#include
#include
using namespace std;
int temp,temp2,i,j;
int f(int t)
{
  temp2 = sqrt(float(t))+1;
  for(j=2;j
    if(t%j==0) 
    return 0;
  return 1;
}

int main()
{
  int prime[10000],qu[20000],result,k,h,num,tag[10000],sum,index,itag,d[10000],atag;
  while(1)
  {
    for(i = 1000;i<10000;++i) {tag[i] = 0,d[i]=0;}
    cin>>num>>result;
    k=0;h=1;qu[k]=num;index=0;itag=1;tag[num]=1;atag=0;
    while(k!=h)
    {
      if(qu[k] == result) 
      {cout<<d[qu[k]]<<endl;break;}
      if(qu[k]%2==0) 
        continue;
      temp=qu[k]-qu[k]+1;
      for(i=0;i<5;i++,temp+=2)
        if(f(temp)==1&&tag[temp]==0)
          {
            tag[temp]=1;d[temp]=d[qu[k]]+1;qu[h]=temp;
            if(temp==result)
              {cout<<d[temp]<<endl;atag=1;break;}
            ++h;
          }
      if(atag==1) break;
      temp=qu[k]-qu[k]0/10*10;
    for(i=0;i<10;++i,temp+=10)
    if(f(temp)==1&&tag[temp]==0)
    {tag[temp]=1;d[temp]=d[qu[k]]+1;qu[h]=temp;
    if(temp==result){cout<<d[temp]<<endl;atag=1;break;}++h;}if(atag==1) break;
    temp=qu[k]-qu[k]00/100*100;
    for(i=0;i<10;++i,temp+=100)
    if(f(temp)==1&&tag[temp]==0)
    {tag[temp]=1;d[temp]=d[qu[k]]+1;qu[h]=temp;
    if(temp==result){cout<<d[temp]<<endl;atag=1;break;}++h;}if(atag==1) break;
    temp=qu[k]-qu[k]/1000*1000+1000;
    for(i=0;i<8;++i,temp+=1000)
    if(f(temp)==1&&tag[temp]==0)
    {tag[temp]=1;d[temp]=d[qu[k]]+1;qu[h]=temp;
    if(temp==result){cout<<d[temp]<<endl;atag=1;break;}++h;}if(atag==1) break;
    ++k;
  }
  }
  return 1;
}

站一下最终的代码:
function createThink(w,h) {
    var previousDirection = 'down';
    var hang = 0;
    var out = false;
    var minMap = [];
    var nextFood;
    var bfsqueue;
    for(var x = 0; x < w; x ++ ) {
        minMap[x] = [];
        for(var y = 0; y < h; y ++ ) {
            minMap[x][y] = 99999999;
        }
    }

    function clearMap() {
    for(var x in minMap) {
        for(var y in minMap[x]) {
        minMap[x][y] = 99999999;
        }
    }
    }

    function legal(x, y, game) {
    if(x >= w || x <= -1 || y >= h || y <= -1) {
        return false;
    } else {
        return true;
    }
    }
    function checkCollision(x, y, s) {
        for(var p in s) {
            if(x === s[p].x && y === s[p].y) {
                return true;
            }
        }
        return false;
    }
     
    function bfs(loc, game) {
        bfsqueue = [];
        bfsqueue.push({
            x: loc.x
            ,y: loc.y
            ,dist: 0
        });
        while(bfsqueue.length > 0) {
            loc = bfsqueue.shift();
            if(legal(loc.x, loc.y, game) == false) {
                continue;
            }
            if(checkCollision(loc.x, loc.y, game.snake)) {
                minMap[loc.x][loc.y] = -1;
                continue;
            }
            if(minMap[loc.x][loc.y] != 99999999) {
                continue;
            }
            minMap[loc.x][loc.y] = loc.dist;
            bfsqueue.push({
                x: loc.x
                ,y: loc.y - 1
                ,dist: loc.dist + 1
            });
            bfsqueue.push({
                x: loc.x
                ,y: loc.y + 1
                ,dist: loc.dist + 1
            });
            bfsqueue.push({
                x: loc.x - 1
                ,y: loc.y
                ,dist: loc.dist + 1
            });
            bfsqueue.push({
                x: loc.x + 1
                ,y: loc.y
                ,dist: loc.dist + 1
            });
        }
    }
     
    return function(game) {

        if(game.snake.length < 40){               //吃的食物在35个以内用宽度优先搜索
        head = game.snake[0];
        if(nextFood == undefined) {
            nextFood = game.food[0];
        }
        if(minMap == undefined) {
            minMap = [];
            for(var x = 0; x < game.width; x ++ ) {
                minMap[x] = [];
                for(var y = 0; y < game.height; y ++ ) {
                    minMap[x][y] = 99999999;
                }
            }
            bfs(game.food[0], game);
        }
        if(game.food[0].x != nextFood.x || game.food[0].y != nextFood.y) {
            clearMap();
            bfs(game.food[0], game);
            nextFood = game.food[0];
        }
        var minDirect = "up";
        var minDist = 99999999;
        if(legal(head.x + 1, head.y, game)) {
            if(checkCollision(head.x + 1, head.y, game.snake) == false) {
                if(minDist > minMap[head.x + 1][head.y] && minMap[head.x + 1][head.y] != -1) {
                    minDirect = "right";
                    minDist = minMap[head.x + 1][head.y];
                }
            }
        }
        if(legal(head.x - 1, head.y, game)) {
            if(checkCollision(head.x - 1, head.y, game.snake) == false) {
                if(minDist > minMap[head.x - 1][head.y] && minMap[head.x - 1][head.y] != -1) {
                    minDirect = "left";
                    minDist = minMap[head.x - 1][head.y];
                }
            }
        }
        if(legal(head.x, head.y + 1, game)) {
            if(checkCollision(head.x, head.y + 1, game.snake) == false) {
                if(minDist > minMap[head.x][head.y + 1] && minMap[head.x][head.y + 1] != -1) {
                    minDirect = "down";
                    minDist = minMap[head.x][head.y + 1];
                }
            }
        }
        if(legal(head.x, head.y - 1, game)) {
            if(checkCollision(head.x, head.y - 1, game.snake) == false) {
                if(minDist > minMap[head.x][head.y - 1] && minMap[head.x][head.y - 1] != -1) {
                    minDirect = "up";
                    minDist = minMap[head.x][head.y - 1];
                }
            }
        }
        return minDirect;}else {                                     //吃的食物在35个以外用追尾吧方法。
            if(game.snake.length > 55){
            hang = Math.floor((game.snake.length - 29) / 26);
        }
        else hang = 0;
        if(out) {
       
            if (game.food[0].x < game.snake[0].x && game.food[0].x != 0) {
                previousDirection = 'left';
                return previousDirection;
            };
            if(game.food[0].x === game.snake[0].x && game.food[0].y != 0 ){
                if(previousDirection === 'up' && game.snake[0].y > game.food[0].y ) {
                    return previousDirection;
                }else if(previousDirection === 'left' && game.snake[0].y > game.food[0].y){
                    previousDirection = 'up';
                    return previousDirection;
                }else if(game.snake[0].y < game.food[0].y && game.food[0].x != 0){
                    previousDirection = 'down';
                    return previousDirection;
                }
            }
            if(game.snake[0].x === 0){
                out = false;
                previousDirection = 'up';
                return previousDirection;
            }
            previousDirection = 'left';
            return previousDirection;
        } else {
            if(game.snake[0].x === 0 && game.snake[0].y === 0) {
                previousDirection = 'right';
                return previousDirection;
            }

            if(hang > 0 && game.snake[0].x != 0 && previousDirection == 'up' && game.snake[0].y === 1){
                previousDirection = 'left';
                return previousDirection;
            }
            if(hang > 0 && previousDirection == 'left' && game.snake[0].y === 1){
                previousDirection = 'down';
                return previousDirection;
            }
             

            if(previousDirection == 'down' && game.snake[0].x != 0 && game.snake[0].y === h - 1) {
                previousDirection = 'left';
                return previousDirection;
            }

            if(game.snake[0].x === w - 1 && game.snake[0].y === 0) {
                previousDirection = 'down';
                return previousDirection;
            }
            if(game.snake[0].x === 0 && game.snake[0].y === h - 1) {
                previousDirection = 'up';
                return previousDirection;
            }


            if( hang > 0 && game.snake[0].x === w - 2 && game.snake[0].y === h - 1){
                previousDirection = 'up';
                return previousDirection;
            }
            if( hang > 1 && game.snake[0].x === w - 4 && game.snake[0].y === h - 1){
                previousDirection = 'up';
                return previousDirection;
            }
            if( hang > 2 && game.snake[0].x === w - 6 && game.snake[0].y === h - 1){
                previousDirection = 'up';
                return previousDirection;
            }
            if( hang > 3 && game.snake[0].x === w - 8 && game.snake[0].y === h - 1){
                previousDirection = 'up';
                return previousDirection;
            }
            if( hang > 4 && game.snake[0].x === w - 10 && game.snake[0].y === h - 1){
                previousDirection = 'up';
                return previousDirection;
            }
            else if(game.food[0].y != 0 && game.snake[0].x === game.food[0].x && game.snake[0].y === h - 1) {
                out = true;
                previousDirection = 'up';
                return previousDirection;
            }

            return previousDirection;
        }
        }
    };//return game 函数的
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值