首页 > 其他分享 >AtCoder Beginner Contest 273 ABCD

AtCoder Beginner Contest 273 ABCD

时间:2023-07-09 13:12:58浏览次数:60  
标签:ABCD AtCoder insert int ll cin long 273 dx

AtCoder Beginner Contest 273

A - A Recursive Function

Problem Statement

题意:给你一个函数\(f(x)\)

  • \(f(0)=1\)
  • 对于所有正整数\(k\),有\(f(k) = k*f(k-1)\)

找到\(f(N)\)

Solution

思路:数据范围只有\(10\),直接递归。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f(ll n)
{
	if(n==0)return 1;
	return n*f(n-1);
}
int main()
{
	ll n;
	cin>>n;
	cout<<f(n)<<endl;
	return 0;
}

B - Broken Rounding

Problem Statement

题意:给你一个非负整数\(X\),求对\(X\)进行以下操作\(K\)次的结果

操作:对数字\(X\)按\(10^i\)进行四舍五入操作。

比如:\(273\)按照\(10^2\)四舍五入就是\(300\),\(273\)按\(10^1\)四舍五入就是\(270\)

Solution

思路:先变成小数,对其进行保留到整数位的四舍五入,在乘回来。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int main()
{
	ll x;
	int k;
	cin>>x>>k;
	ll r = 1;

	for(int i = 1;i<=k;i++)
	{
		r*=10;
		x = round(x/(long double)r)*r;
	}
	cout<<x<<endl;
	return 0;
}

C - (K+1)-th Largest Number

Problem Statement

题意:你有一个序列 \(A = (A_1, A_2 , \ ..., A_n)\) ,你需要求有多少个数满足 \(A\) 中有 \(k\) 个不同的数 \(\geq\) \(a_i\) \((i \in [1, n])\)

Solution

思路:sort+二分

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+10;
int a[N];
vector<int>v;
map<int,int>mp;
int main()
{
	int n;
	cin>>n;
	for(int i = 1;i<=n;i++)
		cin>>a[i],v.push_back(a[i]);
	sort(v.begin(),v.end());
	v.erase(unique(v.begin(),v.end()),v.end());
	int m = v.size();
	for(int i = 1;i<=n;i++)
	{
		int pos = lower_bound(v.begin(), v.end(),a[i])-v.begin();
		mp[max(0,m-pos-1)]++;
	}
	for(int i = 0;i<n;i++)
		cout<<mp[i]<<endl;
	return 0;
}

D - LRUD Instructions

Problem Statement

题意:你有一个\(n\times m\) 的矩阵,矩阵上有 \(N\) 个障碍物,现在给你 \(Q\)次询问,问向 \(R_i\) 的方向走 \(C_i\)步到哪里了。 前一步能影响后一步,障碍物不能越过,不能走出边界。

Solution

思路:首先很明显直接模拟肯定T,那么我们对于一个点需要快速知道离每个方向它最近的的一个障碍物的位置,可以用\(map<ll,set<ll>>\)来快速查找。因为数据范围\(1e9\),需要离散化一下。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,x,y;
map<ll,set<ll>>dx,dy;
int main()
{
	cin>>n>>m>>x>>y;
	int N;
	cin>>N;
	for(int i = 1;i<=N;i++)
	{
		ll xx,yy;
		cin>>xx>>yy;
		dx[xx].insert(yy);
		dy[yy].insert(xx);
	}

	for(auto &i:dx)
	{
		i.second.insert(0);
		i.second.insert(m+1);
	}
	for(auto &i:dy)
	{
		i.second.insert(0);
		i.second.insert(n+1);
	}
	
	int q;
	cin>>q;
	for(int i = 1;i<=q;i++)
	{
		char op;
		ll k;
		cin>>op>>k;
		if(op=='L')
		{
			ll nxt_y = y-k;
			if(dx.find(x)==dx.end())
				y = max(nxt_y,1ll);
			else
			{
				auto it = dx[x].lower_bound(y);
				it = prev(it);
				//cout<<"*it + 1 = "<<*it+1<<" nxt_y = "<<nxt_y<<endl;
				y = max(*it+1,nxt_y);
			}
		}
		else if(op=='R')
		{
			ll nxt_y = y+k;
			if(dx.find(x)==dx.end())
				y = min(nxt_y,(ll)m);
			else
			{

				auto it = dx[x].lower_bound(y);
				//cout<<"*it - 1 = "<<*it-1<<" nxt_y = "<<nxt_y<<endl;
				y = min(*it-1,nxt_y);
			}
		}
		else if(op=='U')
		{
			ll nxt_x = x-k;
			if(dy.find(y)==dy.end())
				x = max(nxt_x,1ll);
			else
			{
				auto it = dy[y].lower_bound(x);
				it = prev(it);
				x = max(*it+1,nxt_x);
			}
		}
		else
		{
			ll nxt_x = x+k;
			if(dy.find(y)==dy.end())
				x = min(nxt_x,(ll)n);
			else
			{
				auto it = dy[y].lower_bound(x);
				x = min(*it-1,nxt_x);
			}
		}
		cout<<x<<" "<<y<<endl;
	}
	return 0;
}

标签:ABCD,AtCoder,insert,int,ll,cin,long,273,dx
From: https://www.cnblogs.com/nannandbk/p/17538608.html

相关文章

  • AtCoder Beginner Contest 309
    感觉F写了个乱搞做法A-Nine(abc309A)题目大意给定一个\(3\times3\)的网格,以及两个数字。问这两个数字是否水平相邻。解题思路求出两个数字的横纵坐标,看是否横坐标相同,纵坐标差一即可。读题不仔细,开题就WA了。神奇的代码#include<bits/stdc++.h>usingnamespa......
  • AtCoder Grand Contest 058 D Yet Another ABC String
    洛谷传送门AtCoder传送门OrzH6_6Q,感谢他给我们带来了这道容斥好题。这个东西看起来很不好搞。可以尝试容斥。但是我们要容斥啥?钦定ABC不出现,其他任意?感觉还是很难算。观察不合法子串,发现它们很有特点。如果我们钦定\(\texttt{A}\)为\(0\),\(\texttt{B}\)为\(1\),\(\te......
  • AtCoder Beginner Contest 308 题解
    https://atcoder.jp/contests/abc308/tasks_printA-NewScheme过水已隐藏。#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>usingnamespacestd;u......
  • AtCoder Beginner Contest 264 ABCDE
    AtCoderBeginnerContest264A-"atcoder".substr()ProblemStatement题意:截取字符串atcoder的[L,R]一段并输出。Solution题解:用string.substr直接写#include<bits/stdc++.h>usingnamespacestd;intmain(){ strings="?atcoder"; intl,r; cin&......
  • BZOJ 2730: [HNOI2012]矿场搭建 tarjan割点
    2730:[HNOI2012]矿场搭建TimeLimit: 10Sec  MemoryLimit: 128MBSubmit: 2010  Solved: 935[Submit][Status][Discuss]Description煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口......
  • AtCoder Regular Contest 163
    A只需暴力判断能否分成两部分即可。时间复杂度\(\mathcal{O}(n^2)\)。B肯定是选值域连续的一段数操作,排序后枚举区间即可。时间复杂度\(\mathcal{O}(n\logn)\)。C场上降智了15min,我是什么shaber啊。注意到\(1=\frac1n+\sum_{i<n}\frac{1}{i(i+1)}\),但......
  • AtCoder Beginner Contest 304
    A:1#include<cstdio>2#include<cstring>3#include<algorithm>4#include<iostream>5#include<string>6#include<vector>7#include<stack>8#include<bitset>9#include<cstdlib>10#include......
  • AtCoder Beginner Contest 308 - E
    题目链接:abc308前四题简单就不放了E-MEX阿巴阿巴,比赛的时候想复杂了,一直在想怎么快速的统计27种mex的情况,啊,前面对后面的影响等等等,反正就是想复杂了现在再想想,看了官方题解,从'E'出发,统计其前后各3种数字的个数,再用mex函数判答案,\(O(n)\)即可!剩下的见代码吧,做完之后发现,没......
  • Atcoder Beginer Contest 306 D ~ E
    vp中途突然拉肚子>_<D-PoisonousFull-CourseD-PoisonousFull-Course(atcoder.jp)题意一个人初始是健康的,现在有n道菜摆在他面前,每道菜都有自已的美味值,但是有些菜是有毒的,有些菜是无毒的。如果他在健康状态吃了有毒的菜就会变成中毒状态,如果他在中毒状态吃了无毒的菜就......
  • AtCoder Regular Contest 163
    Preface补题,这场比赛的时候被拉去开科研组会了,所以就没现场打了这两天军训在伤病连划水,白天可以好好想题目舒服的一批这场D题确实很妙,需要一些竞赛图相关的知识才能想到转化,不过也算是学到一个重要trick了吧A-DivideString显然只要考虑能否分成两个串即可,首先如果存在\(i......