2011年5月18日

Amazon 2面杯具

前些天面了Amazon seattle, 很快收到面试通知,一面很顺利,第二天就收到二面通知。 一面就问了一些基本的问题,算法就问了一个公共子串的问题,出了个budge,不过提醒后很快就fix掉。 然后问数据结构,树和图,比较基本,判断是图还是树。 二面上来都没寒暄几句就直接进入面试。。。结果太紧张,第一题就听错题目,给出了很有把握的一个算法。结果考官说你确定听清题目了?于是又重复了一遍,发现确实听错了,于是用hash和排序解决问题。 接下来是一个简单的DP。 然后问什么是BST,怎么实现。这个很清楚,但是要求在纸上coding,然后电话里大声读给他听,然后就杯具了。。。“&”符号不知道该怎么读,只能说logic and。。。面试官听不懂。。。然后纠结。。。最后说是keyboard上面数字7上方的符号(^^|||),然后更加紧张,类里面忘了写初始化构造函数,然后直到面试结束都没发现。。。结果就杯具了。。。 不过anyway,确实学到了东西,还是挺不错的经历。 希望后面的面试能够顺利^_^

posted @ 2011-05-18 04:09 xmx 阅读(116) 评论(0) 编辑

2007年11月10日

N皇后回溯

#include const int n = 15 ; //15皇后问题.改动n可变成N皇后问题 const int n_sub = n - 1 ; int queen[n] ; //N个棋子.N对应每一列,如n=0的棋子只下在0列,1下1....类推 bool row[n] ; //棋局的每一行是否有棋,有则为1,无为0 ; bool passive[2*n-1] ; //斜率为1的斜线方向上是不是有皇后 bool negative[2*n-1] ; //斜率为负1的斜线方向上是不是有皇后. //之所以用全局变量,因全局数组元素值自动为0 int main() { int cur = 0 ;//游标,当前移动的棋子(哪一列的棋子) bool flag = false ; //当前棋子位置是否合法 queen[0] = -1 ; //第0列棋子准备,因一开始移动的就是第0列棋子 int count = 0 ; //一共有多少种下法 ; cout<<"============================Starting============================="<=0) { while(cur>=0 && queen[cur]= n) { //如果当前列已经下完(找不到合法位置) // cout<<"当前行是非法行,当前列棋子走完,没有合法位置,回溯上一列棋子"<=0) { row[queen[cur]] = false ; passive[queen[cur] + cur] = false ; negative[n_sub + cur - queen[cur]] = false ; } //由于要移下一步,所以回溯棋子原位置所在行应该没有棋子啦.置row[]为false //并且棋子对应的斜线的标志位passive[cur]和negative[cur]也应该要设为false ; } else { //先判断棋子所在行没有棋子 if(row[queen[cur]] == false) { //当前行没有棋子 // cout<<"棋子"<= n) { cur-- ; row[queen[cur]] = false ; passive[queen[cur] + cur] = false ; negative[n_sub + cur - queen[cur]] = false ;//原理同回溯 } flag = false ; } } }//else } } cout< posted @ 2007-11-10 11:31 xmx 阅读(224) 评论(0) 编辑

2007年10月28日

"中航文化杯" 2007 ACM/ICPC 国际大学生程序设计竞赛亚洲区域赛(南京)

我们队   southeast university FT2 拿了个银牌,nice
要是如果把那个后缀数组的模版也带去的话就更nice了,G也能搞定了,那就...
不过还是挺nice的^_^

posted @ 2007-10-28 19:40 xmx 阅读(314) 评论(1) 编辑

2007年10月20日

一个用来练dfs的简单迷宫问题

#include <stdio.h>
#include <string.h>
using namespace std;

int i,t,n,m,k;
int x1,x2,y1,y2;
char p[110][110];
short turn[110][110];

bool dfs(int x,int y,int t,int d)
{
    int tx,ty,tt,td,i,j;
    bool flag;
   
    if(x<0 || x>=n || y<0 || y>=m)
        return false;
    if(t > turn[x][y] || t > k)    return false;
    else    turn[x][y] = t;
   
    if(t == k)
        if(x!=x2-1 && y!=y2-1)
            return false;

    if(x==x2-1 && y==y2-1)    return true;
   
    for(i=0;i<4;i++)
    {
        if(i==2)    continue;
        td = (d+i) % 4;
        tt = t + i%2;
        switch(td)
        {
        case 0:
            tx = x-1;
            ty = y;
            break;
        case 1:
            tx = x;
            ty = y+1;
            break;
        case 2:
            tx = x+1;
            ty = y;
            break;
        case 3:
            tx = x;
            ty = y-1;
            break;
        }
       
        if(p[tx][ty] == '.')
        {
            p[tx][ty] = '*';
            if( dfs(tx,ty,tt,td) )
            {
                p[tx][ty]  = '.';
                return true;
            }
            p[tx][ty]  = '.';
        }
    }
    return false;
}

int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&n,&m);
        getchar();
        for(i=0;i<n;i++)
            gets(p[i]);
        scanf("%d %d %d %d %d",&k,&y1,&x1,&y2,&x2);
        memset(turn,127,sizeof(turn));
        for(i=0;i<4;i++)
        {
            p[x1-1][y1-1] = '*';
            if( dfs(x1-1,y1-1,0,i) )
                break;
        }
        if(i==4)    printf("no\n");
        else    printf("yes\n");
    }
}

posted @ 2007-10-20 15:01 xmx 阅读(367) 评论(1) 编辑

2007年10月16日

pku 1662 还是找规律的

说明:这道题目感觉比较难想,开始我真的拿出了几枚硬币在那边试,试着把比较小的情况找出来,看能够找到一般的规律;
结果发现:似乎是部分有规律,还有的看着有规律,但是很难统一起来...到最后终于发现了似乎总的翻的次数和硬币总数有关,是硬币数的整数倍或者整数倍减一,(这个到现在我也不知道为什么),然后试着看某枚硬币回到原来状态需要多少,然后这样做,结果就对了^_^
#include<stdio.h>
int main()
{
 int t,n,k,k0,p,flag,ch;
 scanf("%d",&t);
 while(t--)
 {
  scanf("%d",&n);
  if(n==1)
  {
   printf("2\n");
   continue;
  }
  k=n/2,k0=n%2;
  p=1,flag=0,ch=0;
  if(k0)
  {
   do
   {
    if(p%2)
    {
     flag=1-flag;
     p=k+1-p/2;
    }
    else p=k+1+p/2;   
    ch++;
   }while(p!=1);
  }
  else
  {
   do
   {
    if(p%2)
     p=k+(p+1)/2;
    else
    {
     flag=1-flag;
     p=k-p/2+1;
    }   
    ch++;
   }while(p!=1);
  }
  __int64 ch2=ch;
  __int64 ans=ch2*n-flag;
  printf("%I64d\n",ans);
 }
 return 0;
}

posted @ 2007-10-16 21:28 xmx 阅读(199) 评论(0) 编辑

2007年10月15日

pku 1806 Manhattan 2025(找规律)

摘要: #include <stdio.h>#include <string.h>char ss[1000][1000];void pp1(int a , int b , int c) //a 行数 b最大数 c最小数 { int i , j , k , p , q; for(j = 1;j <= a;j++) for(k = 1;k <= a;k++) ss[j][...阅读全文

posted @ 2007-10-15 20:52 xmx 阅读(168) 评论(0) 编辑

2007年10月14日

今天西华的比赛,啥都不说啦,相当的nice!~~~

摘要: ^_^,不说啥了阅读全文

posted @ 2007-10-14 14:21 xmx 阅读(138) 评论(1) 编辑

2007年10月13日

今天北京赛区的比赛

摘要: 一般都能作出个4,5题来,可惜我们有两题dp没有想到,不然的话应该就好了^_^阅读全文

posted @ 2007-10-13 23:43 xmx 阅读(117) 评论(0) 编辑

2007年10月10日

pku 1505 copying books(DP)

摘要: #include<stdio.h>#include<string>#include<algorithm>using namespace std;int t,k,m;int books[510];int dp[510][510];int part[510];#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ...阅读全文

posted @ 2007-10-10 22:48 xmx 阅读(405) 评论(0) 编辑

2007年10月9日

最近看的一些东西

摘要: 称球问题:给定一架天平,有n个球,其中一个是次品。结论1 次品的重量比其他的重,称ceil(log3(n))次就能找出那个次品。结论2 轻重不详。有一个标准球。称ceil(log3(2*n)) 次就可以找到次品,并且知道轻重。结论3 轻重不详。称ceil(log3(2*n+2)) 次就可以找到次品,并且次品的轻重。结论4 轻重不详。有一个标准球,称ceil(log3(2*n-1)) 次就可以找出次...阅读全文

posted @ 2007-10-09 22:47 xmx 阅读(104) 评论(0) 编辑

仅列出标题  下一页

导航

统计

公告