icpc2019南京区域赛

2019 ICPC Asia Nanjing Regional

A. A Hard Problem

题意: 签到

题解: 签到

代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;
int const N = 2e5 + 10;
int n, m, T;

int main() {
   
    cin >> T;
    while(T--) {
   
        cin >> n;
        cout << n / 2 + 1 + (n & 1) << endl;
    }
    return 0;
}

B.Chessboard

题意: 题目看不懂,不补了

题解:

代码:

C.Digital Path

**题意:**一个n*m的矩阵,每一个格子上都有一个数字,我们可以从任意的点出发,每次向上下左右四个方向走,只能到有公共边的格子上去,求一共有多少条完整路径。完整的路径规定:路径长度大于等于4、路径上的点权值按1递增。 1 < = n , m < = 1000 , − 1 0 7 < = a i , j < = 1 0 7 1 <= n, m <= 1000, -10^7 <= a_{i, j} <= 10^7 1<=n,m<=1000,107<=ai,j<=107

题解: 由于规定了数字大小按1递增,因此所走的路径是一个dag。那么我们可以维护 f [ i ] [ 1 ] 、 f [ i ] [ 2 ] 、 f [ i ] [ 3 ] 、 f [ i ] [ 4 ] f[i][1]、f[i][2]、f[i][3]、f[i][4] f[i][1]f[i][2]f[i][3]f[i][4] 分别表示从i开始往前的长度为1、2、3和大于等于4的路径条数,每次使用队头元素去更新相邻的点即可。

代码:

/*
3 5
1 2 3 8 7
-1 -1 4 5 6
1 2 3 8 7
*/

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;
int const MAXN = 1e3 + 10, MAXM = 4e6 + 10, mod = 1e9 + 7;
int n, m, T;
int g[MAXN][MAXN];
int e[MAXM], ne[MAXM], h[MAXN * MAXN], idx, f[MAXN * MAXN][4];
int d[MAXN * MAXN];
int dx[4] = {
   -1, 0, 1, 0}, dy[4] = {
   0, 1, 0, -1};
int mapping(int x, int y) {
   
    return x * m + y;
}

void add(int a, int b ) {
   
    e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

int top_sort() {
   
    queue<int> q;
    for (int i = 0; i < n * m; ++i) {
   
        if (d[i] == 0 ) q.push(i), f[i][1] = 1;
    }
    int res = 0;
    while(q.size()) {
   
        auto t = q.front();
        q.pop();
        int flg = 0;
        for (int i = h[t]; ~i; i = ne[i]) {
   
            int j = e[i];
            f[j][2] = (f[j][2] + f[t][1]) % mod;
            f[j][3] = (f[j][3] +</
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值