201604-1(拆点计数),201604-2(俄罗斯方块)

//201604-1
#include <iostream>
#include <cstdio>

using namespace std;

int main() {
    int n;
    scanf("%d", &n);

    int arr[n];
    for (int i = 0; i < n; i++)
        scanf("%d", &arr[i]);

    int count = 0;
    for (int i = 1; i < n - 1; i++)
        if ((arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) || (arr[i] < arr[i - 1] && arr[i] < arr[i + 1]))
            count++;
        
    printf("%d\n", count);
    return 0;
}

//201604-1
#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    scanf("%d", &n);

    vector<int> v(n);
    for (int i = 0; i < n; i++)
        scanf("%d", &v[i]);

    int res = 0;
    for (int i = 1; i < n - 1; i++)
        if ((v[i] > v[i - 1] && v[i] > v[i + 1]) || (v[i] < v[i - 1] && v[i] < v[i + 1]))
            res++;
        
    printf("%d\n", res);

    return 0;
}

//201604-2
#include <iostream>
#include <cstdio>

const int ROW = 15;
const int COL = 10;
const int N = 4;

int board[ROW + 1][COL];
int block[N][N];
struct {
    int row, col;
} coords[N];

using namespace std;

int main() {
    int row, col;

    // 输入数据
    for (int i = 0; i < ROW; i++)
        for (int j = 0; j < COL; j++)
            scanf("%d", &board[i][j]);

    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            scanf("%d", &block[i][j]);

    scanf("%d", &col);

    // 提取小方块坐标
    int k = 0;
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            if (block[i][j] == 1) {
                coords[k].row = i;
                coords[k].col = j;
                k++;
            }

    // 模拟小方块落下过程
    row = 0;
    col--;
    bool flag;
    for (;;) {
        flag = false;

        // 0 1 2 3
        //遍历每个小方块
        for (int i = 0; i < N; i++)
            if (board[row + coords[i].row][col + coords[i].col] == 1) {
                flag = true;
                break;
            }

        if (flag)
            break;

        row++;
    }

    row--;

// 合并小方块到方格
    for (int i = 0; i < N; i++)
        board[row + coords[i].row][col + coords[i].col] = 1;

// 输出结果
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            if (j != 0)
                printf(" ");
            printf("%d", board[i][j]);
        }
        printf("\n");
    }

    return 0;
}

//201604-2
#include <bits/stdc++.h>

using namespace std;

int main() {
    vector<vector<int>> v(15);
    for (int i = 0; i < v.size(); i++)
        v[i].resize(10);

    for (int i = 0; i < v.size(); i++)
        for (int j = 0; j < v[i].size(); j++) {
            scanf("%d", &v[i][j]);
            if (v[i][j] == 1)
                v[i][j] = 2;
        }

    vector<vector<int>> temp(4);
    for (int i = 0; i < temp.size(); i++)
        temp[i].resize(4);

    vector<int> dpRow, dpCol;
    for (int i = 0; i < temp.size(); i++)
        for (int j = 0; j < temp[i].size(); j++)
            scanf("%d", &temp[i][j]);

    int col;
    scanf("%d", &col);
    col--;
    for (int i = 0; i < 4; i++) {
        int tempCol = 0;
        for (int j = col; j < col + 4; j++) {
            v[i][j] = temp[i][tempCol++];
            if (v[i][j] == 1)
                dpRow.emplace_back(i), dpCol.emplace_back(j);
        }
    }


//    for (int i = 0; i < v.size(); i++) {
//        for (int j = 0; j < v[i].size(); j++)
//            printf("%d\t", v[i][j]);
//        printf("\n");
//    }

//    模拟方块下降
    bool flag = true;
    while (flag) {

        for (int i = 0; i < 4; i++)

            if (dpRow[i] == 14 || v[dpRow[i] + 1][dpCol[i]] == 2)
                flag = false;
            
        if (flag)
            for (int i = 0; i < 4; i++)
                dpRow[i]++;

    }

    for (int i = 0; i < 4; i++)
        v[dpRow[i]][dpCol[i]] = 2;

    for (int i = 0; i < v.size(); i++)
        for (int j = 0; j < v[i].size(); j++)
            if (v[i][j] == 1)
                v[i][j] = 0;
            else if (v[i][j] == 2)
                v[i][j] = 1;


    for (int i = 0; i < v.size(); i++) {
        for (int j = 0; j < v[i].size(); j++)
            printf("%d\t", v[i][j]);
        printf("\n");
    }


    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值