首页 > 其他分享 >Atcoder ABC355 C~F

Atcoder ABC355 C~F

时间:2024-05-31 17:32:48浏览次数:21  
标签:Atcoder cnt LL kMaxN second cnt2 ABC355 first

C

出题人太善良了,加强到 \(10^5\) 都没问题。

考虑维护每条横线竖线两条对角线上被标记的点的个数,每次标记点后,判断是否有线上点全被标记。

再考虑如何将点编号转为坐标,记编号为 \(t\),推柿子:

\[(x-1)\times n+y=t \]

\[nx+y=t+n \]

\[x=\frac{t+n-y}{n} \]

等同于找到 \(y\) 使得:

\[n\mid t+n-y \]

随便算就行,代码:

点击查看代码
#include <bits/stdc++.h>

using namespace std;
using LL = long long;
using Pii = pair<int, int>;

const LL kMaxN = 2e3 + 5;

LL n, t, cnt[kMaxN][2], cnt2[2];
bool a[kMaxN];

Pii Calc(LL k) {
  if (!(k % n)) {
    return {(k - n) / n, n};
  } else {
    int y = k % n;
    return {(k - y) / n, y};
  }
}

signed main() {
  cin >> n >> t;
  for (LL i = 1, pty; i <= t; i++) {
    cin >> pty;
    Pii t = Calc(pty + n);
    cnt[t.first][0]++, cnt[t.second][1]++;
    cnt2[0] += t.first == t.second, cnt2[1] += t.first + t.second == n + 1;
    (cnt[t.first][0] == n || cnt[t.second][1] == n || cnt2[0] == n || cnt2[1] == n) && (cout << i, exit(0), 0);
  }
  cout << -1;
}

D

线段 \([l1,r1]\) 和 \([l2,r2]\) 相交的条件是:\(r1\ge l2\),扫一遍线段,考虑维护所有

标签:Atcoder,cnt,LL,kMaxN,second,cnt2,ABC355,first
From: https://www.cnblogs.com/Livedreamyhy/p/18224981

相关文章

  • AtCoder Beginner Contest 328
    A-NotTooHard#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;#defineinti64usingvi=vector<int>;i32main(){ ios::sync_with_stdio(false),cin.tie(nullptr); intn,x; cin>>n&g......
  • ABC355
    E将所有的下标作为点,建一张无向图。当且仅当可以询问\([l,r]\)时,在点\(l\)和\(r+1\)之间连一条边。可以发现能求出\([L,R]\)的和等价于\(L\)与\(R+1\)连通,且最少询问次数等于两点间最短路径边数。具体实现是容易的。F边权很小,提示我们可以暴力枚举和替换边。开......
  • AtCoder Beginner Contest 124
    A-Buttons#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta,b; cin>>a>>b; intres=0; if(a>b)res+=a,a--; elseres+=b,b--; if(a>b)res+=a,a--; elseres+=b,b--; cout<<res......
  • AtCoder abc325D
    原题链接ProblemStatementThereare\(N\)productslabeled\(1\)to\(N\)flowingonaconveyorbelt.AKeyenceprinterisattachedtotheconveyorbelt,andproduct\(i\)enterstherangeoftheprinter\(T_i\)microsecondsfromnowandleavesit......
  • ABC355 D区间相交问题
    ABC355D区间相交问题题意给出n个区间,每个区间给出左端点(l)和右端点(r),判断有多少区间成对相交。分析如果我们直接暴力查找每个区间是否和别的区间相交,那么时间复杂度就是O(\(n^2\)),肯定是过不了的。考虑如何优化,通过题意,可以发现优化的关键在于区间相交的判定方式,对于任意两......
  • AtCoder Beginner Contest 355(F - MST Query)
    很久没有见到这么好的题了。原题面用ChatGPT......
  • ABC355
    A.WhoAtetheCake?模拟代码实现a,b=map(int,input().split())ifa==b:print(-1)else:print(6-a-b)B.Piano2模拟代码实现#include<bits/stdc++.h>#definerep(i,n)for(inti=0;i<(n);++i)usingnamespacestd;usingP=pair<......
  • ABC355 A ~ D
    A可能写麻烦了,但是至少它对了。#include<bits/stdc++.h>#definegtgetchar#defineptputchartypedeflonglongll;constintMAXN=2e5+5;constintmod=998244353;llread(){ llx=0,f=1;charch=gt(); while(ch<'0'||ch>'......
  • Tokio Marine & Nichido Fire Insurance Programming Contest 2024(AtCoder Beginner C
    A-WhoAtetheCake?题意:有三个嫌疑犯(1,2,3(号码))现在有两个证人他们指出谁不是嫌疑犯,你可以找到确定的那个罪人吗?找到输出这个人的号码没找到输出-1思路:如果两人指出的人是一个人则输出-1不是则输出6-a-b,因为1+2+3=6(sum)减去a,b肯定可以到达......
  • ABC355 D
    D-IntersectingIntervals我们思考如何计算不交的线段数量首先总的线段如果全部相交那么线段数应为n*(n-1)/2那么对于每对r[i]<l[i]都为不交的线段所以我们需要计算不交的线段数同时删去自己本身点击查看代码#include<bits/stdc++.h>#defineintlonglong#defineall(......