POJ

2016大数据研究中心夏令营上机考试

2016年北京大学计算机科学技术研究所优秀大学生夏令营上机考试

12推免

  1. 石头剪刀布
  2. 最简真分数
include<algorithm>
__gcd(a,b);
  1. encode decode 字符串的处理
  2. 大数,进制转换,unsolved
  3. 8数码问题,和之前做的BFS不同的是,要存储每一种可能的系统状态
struct Node
{
    int s[9];
    int loc;//“0”的位置,把“x"当0
    int status;//康拖展开的hash值
    string path;//路径 更新:next.path=next.path+indexs[i];
};
  1. 热血格斗场 和冷血格斗场要求不一样
  2. 画家问题 重复题不能用BFS
  3. 三角形 重复题,从下往上
  4. Lausanne Capitale Olympique no answer

13推免(校外)

  1. 十进制转六进制,无oj
  2. 电池的寿命,找规律
    令最大寿命为x,其余寿命和为sum,若sum>x,则可以全部用完 ans=(sum+x)/2
    否则 只能用sum的寿命
if(2*x[n-1]>ans)
         ans-=x[n-1];
else ans*=0.5;
  1. 重建二叉树
typedef struct node
  1. 完美覆盖,递推关系的寻找
f(n)=3f(n-2)+2[f(n-4)+...f(0)]
f(n-2)=3f(n-4)+2[f(n-6)+...f(0)]
thus: f(n)=4f(n-2)-f(n-4)
f(0)=1, f(2)=3;
  1. 去掉冗余的括号,两个标准:括号前是否是负号、括号里面是否有操作符号
  2. 坦克大战,done
  3. sightseeing,混合图欧拉路径的判定...
  4. poyla计数,项链涂色问题
//背代码
(long long)(pow(3.0,tmp*1.0));//格式为long long,3.0

13推免(校内)

  1. 字符串插入,没有说怎么结尾,读入方式就是:while(cin>>a>>b)
  2. 书架,临界条件sum>=b
  3. 最长子序列,动态规划
if(a[j]<a[i]&&b[j]+1>b[i])
         b[i]=b[j]+1;//b[i]从1开始
  1. 寻找正方形变量和复杂度都会影响运行时间
//先排序再查找
void *bsearch(const void *key, const void *base, size_t nmem, size_t size, int (*comp)(const void *, const void *));
eg. (point_type*) bsearch ((const void*) key...)
//key指向所要查找的元素,base指向进行查找的数组
//nmem为查找长度,一般为数组长度
//size为每个元素所占的字节数,一般用sizeof(...)表示,comp指向比较子函数
int compare(const void* e1,const void* e2)
{
    const point_type* p1=(const point_type*) e1;
    const point_type* p2=(const point_type*) e2;
    if (p1->x!=p2->x)//先比较x
        return p1->x-p2->x;
    else//x相同就比较y
        return p1->y-p2->y;
}
//cmp的写法
qsort(p,n,sizeof(point_type),compare);
//qsort写法
key->x=x2+y1-y2;
key->y=y2+x2-x1;
//只往一个方向上找,

13夏令营

  1. map,冷血格斗场输入的id没有从小大的顺序
  2. 上台阶,斐波那契数列
  3. 线段树,二分,数字大的用scanf否则易超时! POJ3264
#include<algorithm>  max(a,b);
struct node//用来记录每个叶结点,之所以不用指针是因为用tree[num]来记录每个结点了(树不需要动态操作所以可以这么用)
{
    int l;
    int r;
    int max;
    int min;
};
//用全局变量来记录最大值
int findmax(int l,int r,int ceng)//层是tree[num]的编号
  1. 数独,DFS,用grid[num][1-9]来标记是否已经用了这个数字 POJ2676
  2. 3D迷宫BFS
  3. 数字三角形,递归。
if(map[i+1][j]>map[i+1][j+1])
                map[i][j]=map[i+1][j]+map[i][j];
            else
                map[i][j]=map[i+1][j+1]+map[i][j];
  1. 最小生成树 上下限的设置
  2. 增广方法求最大流 POJ1273
map和min_flow是全局变量,pre和flow在寻找每一条增广路径时更新,

14推免

  1. 单词倒排
  2. DNA排序,struct,qsort,count
  3. 踩方格,DFS深度优先,回溯
  4. 走迷宫找最短路径,BFS广度优先
  5. 二维背包问题
for(i=0;i<c;i++)
    {
        cin>>temp1>>temp2;
        for(j=a;j>=temp1;j--)
        {
            for(k=b;k>=temp2;k--)
            {
                if(dp[j][k]<dp[j-temp1][k-temp2]+1)
                    dp[j][k]=dp[j-temp1][k-temp2]+1;//个数+1
            }
        }
         //dp:精灵球数量,体力值——小精灵的个数
    }
  1. 套汇,Floyed
map<string,int>STL; 
dist[i][i]=1; //自己到自己初始为1
dist[i][j] < dist[i][k] * dist[k][j];//更新条件
  1. trie树,对树的操作:
void clean ()
      root->next[i]=NULL;
void delete(root)
{
      if(root->next[i])
            delete(root->next[i]);
      free(root);
}
pnode p1= (pnode)malloc(sizeof(node));//生成结点
typedef struct node//结构定义
{
      struct node *next[10];//0~9
      int end,cover;
}*pnode;

14夏令营

  1. 人民币支付,水
  2. 排队游戏,类似POJ对括号的处理输入不一定是()!!!
  3. 取石子游戏,巨坑!要么用a/b>=2, 要么用long long a,b;
  4. 去除注释,cin.getline(s,200) 之后对字符的处理、多种情况的考虑没有测试
  5. 求逆序数对即是求归并排序的交换次数,背代码
  6. 坦克大战,BFS的处理map越界!
  7. 背包问题,
d[j]=max(d[j-a]+b,d[j])//j是背包可承受的最大重量,注意上限!
  1. 树的处理,找规律
  2. 宝昌县长要修路,最小生成树的编写,双边距离

15推免

  1. 矩阵转置
  2. 行程编码
  3. 去除重复的数
  4. 分解因数,递归:
       if(a==1) return 1;
       if(b==1) return 0;
       if(a%b==0) return func(a/b,b)+func(a,b-1)
       else return func(a,b-1) 
  1. DFS 深度优先
  2. 背包问题
    64-bit unsigned integer: %I64d
dp[0]=1;
        for (i=1; i<=num; i++)//对于从小到大的序号
            for (j=n; j>=0; j--)
                for (x=1; x<=h[i]; x++)//这个数有多少个
                    if (j-x>=0)
                        dp[j]+=dp[j-x];
  1. 查找二叉树;得到一行中不确定个数的数字输入有可能是0
    while((c=getchar())!='\n')
    {
    if(c>='0'&&c<='9')
    {
    ungetc(c,stdin);
    cin>>a[i++];
    }
    }
  2. Floyd,找两点之间所要经过的最小“最大距离”。
for(k=1; k<=n; k++)
            for(i=1; i<=n-1; i++)
                for(j=i+1; j<=n; j++)
                    if(path[i][k]<path[i][j] && path[k][j]<path[i][j])
                        //则走i->k->j路线,否则走i->j路线
                        if(path[i][k]<path[k][j])
                            path[i][j]=path[j][i]=path[k][j];
                        else
                            path[i][j]=path[j][i]=path[i][k];

15夏令营

  1. 数组的遍历 考虑只有一行的情况!
  2. qsort不能有两个cmp方法,合影
  3. 相同字符串的寻找,题意的理解
  4. To Europe,动态规划!:
t=l*1.0/s+result[j-1];//int变double,考虑到每一层的最优情况
  1. BFS,考虑的是方向不是距离

  2. 相邻的点可以到达

  3. 用普通的BFS不行,因为即使当前的点是segment最少的点,也不能保证接下来找到点是segment最少的。

  4. 从原点开始,把1步、2步…能走到的点都放进队里。而不是只找可以走到的一个点

  5. 审题! 每一个输入之后有一个空行

  6. memset(v,0,sizeof(v));

  7. 二叉查找树的建立

  8. 两点之间的最短距离


16推免(check)

  1. 石头剪刀布
  2. 字符串判断,'a'-'A'=32 极值Z的处理
  3. 矩阵输出顺序
  4. DFS,背代码,递归的利用
不是可能性!是数独的要求!
  1. 10000个数的计算,不能直接计算,而是每次计算都取余数,类似背包问题用0、1存结果
   1. %的结果可能是负的!
   2. 不管是+a[i]还是-a[i]都可能出现mod是负的!
   3. 动态规划,用dp[10001][101]存储!
  1. 画家问题,和POJ的题不一样,不能简单的枚举否则会超时。
for(int k=0; k<pow(2.0, n); k++)
      getLine(k);
void getLine(int k)
{
    //通过二进制枚举第一行可能发生的所有情况
    int j = n;
    while(j>0)
    {
        line[j] = k % 2;//line[j]代表第一行的第j列翻转
        k /= 2;
        j--;
    }
}
  1. 最小生成树、字符串的处理not by me
string temp1;
if(temp1.compare(a[j])==0)
  1. 二叉树路线的计算not by me
  2. Magical GCD的理解
    动态规划,gcd函数要自己写

16夏令营

  1. 单词翻转,调试
  2. 加密,矩阵的操作
  3. 文件结构图,目录里的文件也要排序,因此一定要用递归
recur(string s1,int N,int T) //T是test的序号,N是文件层次的序号
  1. 汇率计算,精度的改变,用两个数组决定换不换
double update(double a)
{
    a=a*100;
    int y=int(a);
    return y/100.0;
}
  1. BFS,迷宫,背代码
  2. 前序遍历、中序遍历变为后序遍历。读取一行的两个字符串cin>>s1>>s2
  3. 最小生成树
  4. 多米诺,f[i][j]为枚举到第i个数差为j时最少交换了多少次,要考虑j为负数的情况。
f[i][j]=min(f[i][j],f[i-1][j-(a[i]-b[i])],f[i-1][j+(a[i]-b[i])]+1)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容