首页 > 其他分享 >ABC348F 题解

ABC348F 题解

时间:2024-04-06 22:11:53浏览次数:27  
标签:Contest read 题解 long bitset ABC348F getchar

一些注意点:

  • 一看到这种题就应该往 bitset 的方向想。

  • 如果用 bitset,就应该跳脱之前的思维,尝试从最朴素的暴力重新想起。


看到这道题,发现直接做非常的不可做的样子,考虑 bitset。

我们可以先枚举左端点 \(l\)。这样,当我们枚举 \(j\) 时,对于所有的 \(k\) 使得 \(a_{k, j} = a_{l, j}\) 的 \(k\),\((l, k)\) 可以多一个相等的下标。

于是考虑使用 bitset,\(p_{i, x, j}\) 表示 \(a_{i, j}\) 是否等于 \(x\)。然后直接异或操作即可。

/*******************************
| Author:  DE_aemmprty
| Problem: F - Oddly Similar
| Contest: AtCoder - Toyota Programming Contest 2024#4(AtCoder Beginner Contest 348)
| URL:     https://atcoder.jp/contests/abc348/tasks/abc348_f
| When:    2024-04-06 20:37:56
| 
| Memory:  1024 MB
| Time:    2000 ms
*******************************/
#include <bits/stdc++.h>
using namespace std;

long long read() {
    char c = getchar();
    long long x = 0, p = 1;
    while ((c < '0' || c > '9') && c != '-') c = getchar();
    if (c == '-') p = -1, c = getchar();
    while (c >= '0' && c <= '9')
        x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
    return x * p;
}

const int N = 2007;

long long n, m, ans;
int a[N][N];
bitset <N> s[N][1007], res;

void solve() {
    n = read(), m = read();
    for (int i = 1; i <= n; i ++) for (int j = 1; j <= m; j ++) {
        a[i][j] = read();
        s[j][a[i][j]][i - 1] = 1;
    }
    for (int i = 1; i <= n; i ++) {
        for (int j = 1; j <= n; j ++)
            res[j - 1] = 0;
        for (int j = 1; j <= m; j ++)
            res ^= s[j][a[i][j]];
        for (int j = i; j < n; j ++)
            if (res[j]) ans ++;
    }
    cout << ans;
}

signed main() {
    int t = 1;
    while (t --) solve();
    return 0;
}

标签:Contest,read,题解,long,bitset,ABC348F,getchar
From: https://www.cnblogs.com/aemmprty/p/18118007

相关文章

  • 网站使用CDN出现ttf woff等字体跨域问题解决方案
    如果cdn域名+资源路径是可以通过浏览器url地址栏打开的那么一般是因为nginx配置的原因,找到nginx的配置文件添加以下代码:# 允许指定域名访问;location ~ .*.(eot|ttf|ttc|otf|eot|woff|woff2|svg)(.*) { add_header Access-Control-Allow-Origin http(s)://......
  • arch安装教程+部分问题解决
    arch安装教程+部分问题解决网络配置#进入iwctliwctl#获取device名称我这里是wlan0,后面注意wlan0替换成你自己devicedevicelist#扫描附近wifistationwlan0scan#获取所有可连接wifi名字stationwlan0get-networksstationwlan0connect[wifi名]#输入密码......
  • CF1149D Abandoning Roads 题解
    Description一张\(n\)个点\(m\)条边的无向图,只有\(a,b\)两种边权(\(a<b\)),对于每个\(i\),求图中所有的最小生成树中,从\(1\)到\(i\)距离的最小值。\(2\leqn\leq70,n-1\leqm\leq200,1\leqa<b\leq10^7\)。Solution先考虑一个最小生成树是什么样的形态,显然保留边权......
  • P10245 Swimming Pool题解
    P10245SwimmingPool题意给你四条边\(abcd\),求这四条边是否可以组成梯形。思路这显然是一道简单的普通数学题。判断是否能构成梯形只需看四条边是否能满足,上底减下底的绝对值小于两腰之和且大于两腰之差。证明过程如图,\(AB=a\),\(BC=b\),\(CD=c\),\(AD=d\)。过点\(D\)......
  • P10244 String Minimization 题解
    P10244StringMinimization题意给你四个长度为\(n\)的字符串,分别是\(abcd\)。你可以选择一个\(i\)然后交换\(a[i]\)和\(c[i]\),并交换\(b[i]\)和\(d[i]\)。求在\(a\)的字典序尽量小的前提下,\(b\)字典序最小是什么。思路本题并不难。只需要在\(a[i]>c[i]\)......
  • CF1929B Sasha and the Drawing 题解
    CF1929B题意给定一个\(n\timesn\)的正方形,已知正方形最多有\(4\timesn-2\)条对角线,要求要有至少\(k\)条对角线经过至少一块黑色方格,求至少要将几条对角线涂成黑色。分析分类讨论:当\(k<=4\timesn-4\)时,就只需要在上下两侧图就行,所以答案是\([\frac{k}{2}]\)。当......
  • CF301B Yaroslav and Time 题解
    CF301B这不最短路的板子题吗?思路用\(ak\)代表走到第\(k\)点时的可恢复单位时间的值。\(i\)到\(j\)的距离是\(\left(\left|xi-xj\right|+\left|yi-yj\right|\right)\timesd-ak\)。再打一下最短路代码,建议Floyd,因为短。ACCode#include<bits/stdc......
  • CF30D King's Problem? 题解
    CF30D题意有\(n+1\)个点,其中的\(n\)个点在数轴上。求以点\(k\)为起点走过所有点的最短距离,允许重复。思路有两种情况:\(k\)在数轴上(如图1)。\(k\)在第\(n+1\)个点上(如图2)。图1:图2:像第一种情况:一定存在数轴上某点\(k\),使得人先走遍\(1\simk\),回来,再走遍......
  • CF1915B Not Quite Latin Square 题解
    CF1915B题意给出一个\(3\)行\(3\)列的字符矩形,其中每行都有字符ABC各一个组成,现有一个字符未知,求出未知字符。思路就是说每个字符都应该出现\(3\)次,所以我们只要找到出现两次的字符即可。ACCode#include<bits/stdc++.h>usingnamespacestd;intt;chara[10][10......
  • CF916C 题解
    CF916C题解思路思考发现,如果我们让很多边的边权变得非常大,而故意留下\(1\)到\(n\)的某一条路径,使整条路径之和甚至还没有剩下一条边的权值大,这条路径显然就是最短路了。更重要的是,这样构造的结果,这条路径同时还是整张图的最小生成树。这样我们只需要找一个\(100000\)......