首页 > 其他分享 >AtCoder_abc330

AtCoder_abc330

时间:2023-12-03 12:22:45浏览次数:33  
标签:AtCoder le Contest abc330 int Limit

AtCoder_abc330

比赛链接

A - Counting Passes

A题链接

题目大意

给出$N$个数$a_1,a_2,a_3\cdots,a_N$,和一个正整数$L$。输出有几个$a_i \le L$.

解题思路

O(n)遍历一遍就好了

代码

// Problem: A - Counting Passes
// Contest: AtCoder - TOYOTA SYSTEMS Programming Contest 2023(AtCoder Beginner Contest 330)
// URL: https://atcoder.jp/contests/abc330/tasks/abc330_a
// Memory Limit: 1024 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
using namespace std;
int n,l,cnt;
int main(){
	cin>>n>>l;
	for(int i=1;i<=n;i++){
		int x;cin>>x;
		if(x>=l)cnt++;
	}
	cout<<cnt;
	return 0;
}

B - Minimize Abs 1

B题链接

题目大意

给出一个长度为$N$的序列($A=a_1,a_2,a_3,\cdots,a_N$)和两个数$L,R(L \le R)$。

对于每一个$i=1,2,3,N$,都找到一个$X_i$使其满足:

  • $L \le X_i \le R$
  • 对于每一个$Y(L \le Y \le R)$,都满足$|X_i-a_i| \le |Y-a_i|$

解题思路

题目实际上就是要求$L$~$R$之间与$a_i$差的最小值。分两种情况:

  • 如果$L \le a_i \le R$,那么当$X_i$取$a_i$时,差有最小值$0$
  • 否则如果$a_i \le L$,那么应该取$L$,如果$a_i \ge R$,那么应该取$R$

代码

// Problem: B - Minimize Abs 1
// Contest: AtCoder - TOYOTA SYSTEMS Programming Contest 2023(AtCoder Beginner Contest 330)
// URL: https://atcoder.jp/contests/abc330/tasks/abc330_b
// Memory Limit: 1024 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
using namespace std;
int n,l,r,a;
int main(){
	cin>>n>>l>>r;
	for(int i=1;i<=n;i++){
		cin>>a;
		if(a>=l&&a<=r)
			cout<<a<<" ";
		else if(a<l)
			cout<<l<<" ";
		else cout<<r<<" ";
	}
	return 0;
}

C - Minimize Abs 2

C题链接

题目大意

输入一个$D(1 \le D \le 2 \times 10{12})$,输出$|x2+y^2-D|$的最小值。

解题思路

既然是$x2+y2$,那么$x,y$一定是一个大一个小的(废话),那么我们可以while()枚举那个较大的数,然后二分查找另一个数,使得当较大的数一定时$|x2+y2-D|$最小。最后输出所有结果中最小的那一个就好。

代码

// Problem: C - Minimize Abs 2
// Contest: AtCoder - TOYOTA SYSTEMS Programming Contest 2023(AtCoder Beginner Contest 330)
// URL: https://atcoder.jp/contests/abc330/tasks/abc330_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
using namespace std;
long long d;
long long ans=2e12+1;
int main(){
	cin>>d;
	int i=0;
	while(i*i<=d){
		long long t=i+1;
		long long l=0,r=i+1;
		while(l+1!=r){
			long long mid=(l+r)/2;
			if(mid*mid+t*t<d)
				l=mid;
			else
				r=mid;
		}
		ans=min(ans,min(abs(l*l+t*t-d),abs(r*r+t*t-d)));
		i++;
	}
	cout<<ans;
	return 0;
}

D - Counting Ls

D题链接

题目大意

给出一个$N(2 \le N \le 2000)$和一个$N \times N$的,由ox组成的矩阵,求有多少三个一组的点满足以下几个要求:

  • 三个点互不重合
  • 三个点上都是o
  • 其中两个点在同一行
  • 其中两个点在同一列

解题思路

用$hang[],lie[]$记录下每一行,每一列各有多少个o,那么对于点$(i,j)$,以该点为顶点(另完两个点要么与其在同一行,要么与其在同一列),能组成的组数就为$(hang[i]-1)\cdot(lie[j]-1)$,-1是为了排除自己。

代码

// Problem: D - Counting Ls
// Contest: AtCoder - TOYOTA SYSTEMS Programming Contest 2023(AtCoder Beginner Contest 330)
// URL: https://atcoder.jp/contests/abc330/tasks/abc330_d
// Memory Limit: 1024 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
using namespace std;
int n;
long long ans;
int h[2003],l[2003];
char mp[2003][2003];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>mp[i][j];
			if(mp[i][j]=='o')
				h[i]++,l[j]++;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(mp[i][j]=='o')
			ans+=(h[i]-1)*(l[j]-1);
		}
	}
	cout<<ans;
	return 0;
}

E - Mex and Update

E题链接

第一次做出E题留念

题目大意

给出一个长度为$N$的序列$A$,和$Q$次询问。第$k$次询问包括两个数:$i_k,x_k$,请把$a_{i_k}$改为$x_k$,执行完每次询问后,请输出最大的,不在序列中的非负整数

解题思路

因为$N \le 2 \times 10^5$,所以肯定无法完全覆盖$0$ ~ $2 \times 10^5+1$,这样一来就只需要记录这么多数就好了,然后用堆动态记录最小值。

代码

// Problem: E - Mex and Update
// Contest: AtCoder - TOYOTA SYSTEMS Programming Contest 2023(AtCoder Beginner Contest 330)
// URL: https://atcoder.jp/contests/abc330/tasks/abc330_e
// Memory Limit: 1024 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
using namespace std;
int n,q;
int a[300005];
int t[300010];
priority_queue<int,vector<int>,greater<int> >heap;
int main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(a[i]<=300005)
			t[a[i]]++;
	}
	for(int i=0;i<=300005;i++)
		if(t[i]==0)
			heap.push(i);
	for(int i=1;i<=q;i++){
		int s,x;cin>>s>>x;
		if(a[s]<=300005){
			t[a[s]]--;
			if(t[a[s]]==0)
				heap.push(a[s]);
		}
		a[s]=x;
		if(x<=300005)
			t[x]++;
		while(t[heap.top()]>0)heap.pop();
		cout<<heap.top()<<endl;
	}
	return 0;
}

标签:AtCoder,le,Contest,abc330,int,Limit
From: https://www.cnblogs.com/lmq742643/p/17872829.html

相关文章

  • AtCoder_abc331
    AtCoder_abc331(这次题真的真的真的好难)比赛链接A-Tomorrow题目链接题目大意有一个$M$个月,$D$天的日历,请输出$y年m月z日$的下一天。解题思路先让天数加一,如果超过了$D$就让月份加一,天数减$D$,然后月份同理代码//Problem:A-Tomorrow//Contest:AtCoder-DaiwaSec......
  • ALGO ARTIS Programming Contest 2023 Autumn(AtCoder Regular Contest 168)
    Preface先补一下这场ARC的博客,因为在来回合肥的路上一直在想这场的CD,所以有空后就先把这场补了A-<Inversion>不难发现对于一段连续的<,设其长度为\(x\),则它最少要贡献\(\frac{x(x+1)}{2}\)的答案而我们很容易构造一种方案刚好满足这个下界,只要让每段的结束比下一段的开头大......
  • 像使用stl一样使用线段树 ——AtCoder Library(转载https://zhuanlan.zhihu.com/p/459
    地址:https://zhuanlan.zhihu.com/p/459579152 我这里翻译一下官方的文档。首先需要满足几个性质。(注意 ∗ 是个操作,不是单纯的一个乘号)1)操作满足结合律即 (a∗b)∗c=a∗(b∗c)2)操作需要有个幺元(基本元/单位元)a∗e=e∗a=a如果你有这个一个序列S,长度为N ,接下......
  • Atcoder-Countings4
    Atcoder-Countings4[ABC231G]BallsinBoxesProblem有\(n\)个盒子,初始时第\(i\)个盒子内有\(a_i\)个小球,进行\(k\)次操作后,每次操作等概率随机选择一个盒子放入一个小球,设\(k\)次操作后每个盒子的小球个数为\(b_i\),那么得分为\(\prod_{i=1}^nb_i\)。求出期望得分......
  • AtcoderDP1
    AtcoderDP1收录非计数dp题。[ABC227F]TreasureHunting(2323)Problem给你一个\(N\timesM\)的矩阵,你需要从坐标\((1,1)\)走到坐标\((N,M)\)去,每次只能向右或者向下走。坐标\((i,j)\)的价值是\(A_{i,j}\)。我们定义一条路径的价值是,这条路径经过的坐标的前\(K\)......
  • ABC330 E Mex and Update 题解
    LinkABC330EMexandUpdateQuestion给一个数组\(a\),有\(Q\)次修改每次把\(a_i\)改成\(x\)问每次修改后,不在\(a\)数组中的最小非负数时多少Solution记录每个\(a_i\)出现的次数\(num\)每个修改操作可以看成时先删除,后添加用set维护为\(num_x=0\)的\(x\)......
  • AtCoder Beginner Contest 330
    B-MinimizeAbs1思维题题意:给定一个范围,你选择一个数,使得思路:如果A[i]在l,r中间,那么直接打印就行,如果不是就打印就近的usingnamespacestd;voidsolve(){ intn,l,r; cin>>n>>l>>r; for(inti=1;i<=n;i++){ intx; cin>>x; if(x<l){ cout<<l<<"......
  • ABC330 A-E 题解
    ABC330题解AtCoderBeginnerContest330A-CountingPasses思路:枚举一遍,当前数大于\(L\)使\(ans+1\)即可.代码:#include<iostream>#defineintlonglongusingnamespacestd; intn,l,ans;intx; signedmain(){ cin>>n>>l; for(inti=1;i&......
  • AtCoder Beginner Contest 326
    A-2UP3DOWN#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){inta,b;cin>>a>>b;if(a<bandb-a<=2)cout<<"Yes\n";elseif(a>banda......
  • AtCoder Beginner Contest 322
    A-FirstABC2#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definempmake_pairusingvi=vector<int>;usingpii=pair<int,int>;voidsolve(){intn;strings;cin>>n>>s;......