我选的是前端方向,所以编程题的题目也比较简单,但是坑很多呀,不知道错在哪,最后没办法直接用最暴力的方法AC了。

 

  笔试分为选择和编程,选择20个,每个三分,编程题两道每道20分。

  选择题考点:

    1、数据结构(包括大顶堆、希尔排序、B-树、以及hash)

    2、计算机网络(只考了一两题,TCP和UDP)

    3、数据库(表设计)

    4、HTML/CSS(CSS3、翻书效果怎么实现、一张图上映射多个区域)

    5、JS(禁止前进和后退、作用域)

  我有印象的应该就是作用域的这个题了:

    下面这个代码输出什么(如果我没记错,应该就是原题目)

<!DOCTYPE html>
<html>
<script>
    function func() {
        document.write(a);
        document.write(fun);
        var a = 1;
        function fun(){
            return 2;
        }
    }
</script>

<body>

    <a onclick="func()">点击我</a>
</body>
</html>

  编程题:其实都挺简单的,但是第一题我没想对坑点,我想到的点似乎都没这样的数据。

    第一题:

幸运ID
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 131072KB;其他语言 655360KB
题目描述:
小C有一张票,这张票的ID是长度为6的字符串,每个字符都是数字,他想让这个ID变成他的辛运ID,所以他就开始更改ID,每一次操作,他可以选择任意一个数字并且替换它。

如果这个ID的前三位数字之和等于后三位数字之和,那么这个ID就是辛运的。你帮小C求一下,最少需要操作几次,能使ID变成辛运ID

输入
输入只有一行,是一个长度为6的字符串。

输出
输出这个最小操作次数


样例输入
000000
样例输出
0

Hint
输入样例2
000018

输出样例2
1

样例解释:将前三位任意一个改为9即可满足条件,操作数为1

AC代码:(直接暴力贪心解决)

// Asimple
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;const int maxn = 100000+5;
ll n, m, T, len, cnt, num, ans, Max, k;
string str;
int max_a[3], min_a[3];

void input(){
    while( cin >> str ) {
        int sum1 = 0, sum2 = 0;
        for(int i=0; i<6; i++) {
            if( i < 3 ) sum1 += (str[i]-'0');
            else sum2 += (str[i]-'0');
        }
        int cnt = abs(sum1-sum2);
        if( sum1>sum2 ) {
            for(int i=0; i<6; i++) {
                if( i<3 ) max_a[i] = max((str[i]-'0'), 9-(str[i]-'0'));
                else min_a[i-3] = max((str[i]-'0'), 9-(str[i]-'0'));
            }
        } else {
            for(int i=0; i<6; i++) {
                if( i>=3 ) max_a[i-3] = max((str[i]-'0'), 9-(str[i]-'0'));
                else min_a[i] = max((str[i]-'0'), 9-(str[i]-'0'));
            }
        }
        sort(max_a, max_a+3); sort(min_a, min_a+3);
        int res = 0, j = 2, i = 2;
        while( cnt > 0 ) {
            int te = max(max_a[i], min_a[j]);
            cnt -= te;
            if( te == max_a[i] ) i--;
            else j --;
            res ++;
        }
        cout << res << endl;
    }
}

int main() {
    input();
    return 0;
} 

91%代码(第一版就是91%,之后改的只降不升,最后十分钟无能为力只能暴力AC,求大神找出坑点)

// Asimple
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <vector>
#include <string>
#include <cstring>
#include <stack>
#include <set>
#include <map>
#include <cmath>
using namespace std;
typedef long long ll;const int maxn = 100000+5;
ll n, m, T, len, cnt, num, ans, Max, k;
//vector<int> a[maxn];
string str;
int a[10];

void input(){
    while( cin >> str ) {
        memset(a, sizeof(a), 0);
        int sum1 = 0, sum2 = 0;
        for(int i=0; i<6; i++) {
            if( i < 3 ) sum1 += (str[i]-'0');
            else sum2 += (str[i]-'0');
        }
        int cnt = abs(sum1-sum2);
        int res = cnt/9 + (cnt%9!=0);
        // 下面这个判断是我想的坑点
        // 但是没有下面的语句一样也是91%
        if( cnt == 9 ) {
            if( a[0]+a[9] == 0 ) res++;
        } else if( cnt == 18 ) {
            if( a[0]+a[9]<2 ) res ++;
        }
        cout << res << endl;
    }
    // pas;
}

int main() {
    input();
    return 0;
} 

第二题:


局长的食物
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 131072KB;其他语言 655360KB
题目描述:
局长有N种食物,每种食物有Ai份。

每天局长会吃一份食物,或者买一份食物(即每天只能进行吃或买其中的一种动作),这样过了M天

现在局长想知道M天后第p种食物的份数排名(从大到小,相同算并列,例如3 3 2,则排名为1 1 3)

N,M,P<=100,Ai<=1000

输入
第一行N M P

第二行N个数Ai

接下来M行,每行A i或者B i分别表示买一份食物i,吃一份食物i

输出
一个答案


样例输入
3 4 2
5 3 1
B 1
A 2
A 2
A 3
样例输出
1

简单排序,注意名次的增加就好

AC代码:

// Asimple
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <vector>
#include <string>
#include <cstring>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#define INF 0x3f3f3f3f
#define debug(a) cout<<#a<<" = "<<a<<endl
#define test() cout<<"============"<<endl
#define CLS(a,v) memset(a, v, sizeof(a))
#define pas system("pause")
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int dx[] = {-1,1,0,0,-1,-1,1,1}, dy[]={0,0,-1,1,-1,1,1,-1};
const int maxn = 1000+5;
const ll mod = 1000000007;
ll n, m, T, len, cnt, num, ans, Max, k;
//vector<int> a[maxn];
struct node{
    int ind;
    int sum;
    bool operator < (const node& a) const {
        return sum>a.sum;
    }
};
node a[maxn];

void input(){
    int p;
    while( cin >> n >> m >> p ) {
        for(int i=1; i<=n; i++) {
            cin >> a[i].sum;
            a[i].ind = i;
        }
        char ch;
        while( m -- ) {
            cin >> ch >> num;
            if( ch == 'A' ) {
                a[num].sum ++;
            } else {
                if( a[num].sum>0) a[num].sum --;
            }
        }
        sort(a+1, a+n+1);
        int cnt = 0, te = 1;
        a[0].sum = -1;
        for(int i=1; i<=n; i++) {
            if( a[i].sum !=a[i-1].sum ) {
                cnt += te;
                te = 1;
            } else {
                te ++;
            }
            if( a[i].ind == p ) {
                cout << cnt << endl;
                break;
            }
        }
    }
    // pas;
}

int main() {
    input();
    return 0;
}