首页 > 其他分享 >Atcoder ABC284 前五题题解

Atcoder ABC284 前五题题解

时间:2023-01-08 16:56:06浏览次数:49  
标签:Atcoder ch 10 int 题解 ll long ABC284 define

ABC 284


A - Sequence of Strings

题意:

有n个字符串\(s_1, s_2, s_3, ..., s_n\),要求按\(n, n - 1, n - 2, ..., 1\)的顺序输出

样例:

输入

3
Takahashi
Aoki
Snuke

输出

Snuke
Aoki
Takahashi

水题,直接贴代码,过。

代码

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define gt getchar
#define pt putchar
using namespace std;
inline ll read(){
    ll x=0,f=1;char ch=gt();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=gt();}
    return x*f;}
inline void print(ll x){if(x<0)pt('-'),x=-x;if(x>9)print(x/10);pt(x%10+48);}
int n;
string s[20];
int main(){
    n = read();
    for(int i = 1;i <= n; ++i){
        cin >> s[i];
    }
    for(int i = n; i >= 1; --i){
        cout << s[i] << endl;
    }
    return 0;
}

B - Multi Test Cases

题意:

有 t 组数据.

每组数据中有一个 n 和 一个数组\(a_1, a_2, a_3, ..., a_n\)

求对每组数据来说 a 数组中 共有几个奇数

样例:

输入

4
3
1 2 3
2
20 23
10
6 10 4 1 5 9 8 6 5 1
1
1000000000

输出

2
1
5
0

水题再过

代码

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define gt getchar
#define pt putchar
using namespace std;
inline ll read(){
    ll x=0,f=1;char ch=gt();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=gt();}
    return x*f;}
inline void print(ll x){if(x<0)pt('-'),x=-x;if(x>9)print(x/10);pt(x%10+48);}
int t, n ,v;
int main(){
    t = read();
    while(t--){
        n = read();
        int cnt = 0;
        while(n--){
            if(read() % 2 == 1)cnt++;
        }
        cout << cnt << endl;
    }
    return 0;
}

C - Count Connected Components

题意:

有 n 个点 1 ~ n, m 条边 1 ~ m,求图中共有多少个连接部分

样例:

输入

5 3
1 2
1 3
4 5

输出

2

分析:

直接贴并查集模板

代码:

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define gt getchar
#define pt putchar
using namespace std;
inline ll read(){
    ll x=0,f=1;char ch=gt();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=gt();}
    return x*f;}
inline void print(ll x){if(x<0)pt('-'),x=-x;if(x>9)print(x/10);pt(x%10+48);}
int p[10100];
void init(int x){
    for (int i = 1; i <= x; i++)
        p[i] = i;
}
int find(int x){
    if (p[x] != x) p[x] = find(p[x]);
    return p[x];
}
void merge(int x, int y){
    int fx = find(x);
    int fy = find(y);
    if (fx != fy)
        p[fx] = fy;
}
int cnt = 0;
int main() {
    int n = read(), m = read();
    init(n);
    while (m--)
        merge(read(), read());
    for(int i = 1; i <= n; ++i) {
        if (p[i] == i) cnt++;
    }
    cout << cnt;
}

D - Happy New Year 2023

题意:

有 t 组询问:

每组询问有一个 n ;
求 质数q , p, 使得 \(q ^ 2 \times p = n\)
输出 q, p

数据范围:

\(1 \leqslant t \leqslant 10\)
\(1 \leqslant q \leqslant 9 \times 10 ^ 8\)

样例:

输入

3
2023
63
1059872604593911

输出

17 7
3 7
104149 97711

分析:

这道题的关键并不是判质数, 而是找到一对p, q

因为题目保证有解,所以不必判断无解以及p, q不是质数

结合数据范围我们能得到, \(\min{q, p} \gtrapprox 2.1 \times 10 ^ 6\) ,所以令 \(maxn = 2.1 \times 10 ^ 6\)

而从 1 到 maxn 遍历一遍也不会超时

我们就for 2 ~ maxn 判断是否有值能成为 p 或 q,遇到输出即可

代码:

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define gt getchar
#define pt putchar
using namespace std;
inline ll read(){
    ll x=0,f=1;char ch=gt();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=gt();}
    return x*f;}
inline void print(ll x){if(x<0)pt('-'),x=-x;if(x>9)print(x/10);pt(x%10+48);}
int main(){
	int t = read();
	while(t--){
		ll n = read();
		int bj = 0;
		for(ll i = 2; i <= 2100000; ++i){
			if(n % i == 0 && (n / i) % i == 0){
				print(1ll * i);
                printf(" ");
                print(1ll * (n / i / i));
                puts(" ");
                bj = 1;
				break;
			}
		}
		if(bj == 1) continue;
		for(ll i = 2; i <= 2100000; ++i){
			if(n % i == 0 && ((int)sqrt(n / i) == sqrt(n / i))){
                print(1ll * (sqrt(n / i)));
                printf(" ");
                print(1ll * (1ll * i));
                puts(" ");
				break;
			}
		}
	}
    return 0;
}

E - Count Simple Paths

题意:

有 n 个点 1 ~ n, m 条边 1 ~ m,保证每个点的出度不超过10

令 k 为由点 1 出发的简单路径(不含重复节点)的数量

输出 \(\min({k, 10 ^ 6})\)

数据范围:

\(1 \leqslant n \leqslant 2 \times 10 ^ 5\)
\(0 \leqslant m \leqslant \min({2 \times 10 ^ 5, \tfrac{n(n - 1)}{2}})\)

所有数值均为int内

保证为简单图

分析:

直接链式前向星建图,dfs从1出发,统计经过的不重复的点数即可

代码:

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define gt getchar
#define pt putchar
using namespace std;
inline ll read(){
    ll x=0,f=1;char ch=gt();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=gt();}
    return x*f;}
inline void print(ll x){if(x<0)pt('-'),x=-x;if(x>9)print(x/10);pt(x%10+48);}
vector<ll> v[200005];
void addedge(int x, int y){
	v[x].push_back(y);
}
bool vis[200005];
ll ans=0;
void dfs(int x){
	vis[x]=1;
	for(int i = 0; i < v[x].size(); ++i){
		if(vis[v[x][i]] == 0) dfs(v[x][i]);
	}
	++ans;
	vis[x] = 0;
	if(ans == 1000000){
        cout << ans;
        exit(0);
    }
	return;
}
int main(){
	int n = read(), m = read();
	for(int i = 1; i <= m; ++i){
		int u = read(), v = read();
		addedge(u, v), addedge(v, u);;
	}
	dfs(1);
	cout << ans;
	return 0;
}

剩下的不会了

求大佬们点赞关注

标签:Atcoder,ch,10,int,题解,ll,long,ABC284,define
From: https://www.cnblogs.com/qinzh/p/17034869.html

相关文章

  • Codeforces 1305 F Kuroni and the Punishment 题解 (随机算法)
    题目链接首先注意到每个数最多操作1次就能让他变成2的倍数,所以答案\(\len\)。如果我们能枚举[1,1e12]中所有的质数,并对每个质数p求出把数组中所有数都变成它的倍数的最少......
  • 【题解】P5666 [CSP-S2019] 树的重心
    感觉对重心的理解更直观了一点。题意求一棵树上删去每一条边后两侧子树重心的编号和。\(n\leq3\times10^5\)思路神奇的清真数论。首先这里有一步很妙的操作:把整......
  • Atcoder ABC040D 道路の老朽化対策について
    链接难度:\(\texttt{1656}\)\(n\)个点\(m\)条无向边,每条边\((u_i,v_i)\)有一个对应的时间\(t_i\)。\(q\)次询问,每次询问从\(x_i\)只经过\(t_i>y_i\)的边共能......
  • AtCoder Beginner Contest 284-F - ABCBAC(双哈希)
    F-ABCBAC题目大意:给定一个正整数n,和一个长度为2*n的字符串s问s串能不能是由一个t串经过如下操作变成s串:t串的前i个字符t串的反转串t串的后(n-i)个字符如果存在......
  • LeetCode 887. 鸡蛋掉落-题解分析
    题目来源887.鸡蛋掉落题目详情给你k枚相同的鸡蛋,并可以使用一栋从第1层到第n层共有n层楼的建筑。已知存在楼层f,满足 0<=f<=n,任何从高于f的楼层落......
  • P3829 题解
    题目传送门二维凸包模板传送门题目分析类似于凸包模板的一道题。我们循序渐进地考虑,当半径\(r=0\)时,显然是一个二位凸包模板。接着我们将圆弧加进去,仔细观察发现,我......
  • SYUCT第五次限时训练题解
    第五次限时训练题目大意及ac代码Maxmina题目大意accode#include<iostream>usingnamespacestd;intT,n,m;inta[55];intmain(){cin>>T;whil......
  • AtCoder Beginner Conest 284 解题报告
    AtCoderBeginnerConest284解题报告\(\text{ByDaiRuiChen007}\)\(\text{ContestLink}\)A.SequenceofStrings模拟,时间复杂度\(\Theta(n)\)#include<bits/stdc......
  • 2023.1.7(Atcoder Beginner Contest 284)
    A.HappyNewYear2023Linkhttps://atcoder.jp/contests/abc284/tasks/abc284_dStatement将给定的\(N\)分解成\(N=p^2\cdotq\)的形式,其中\(p,q\)为两个不......
  • Atcoder ABC 284题解
    DHappyNewYear2023(枚举,时间复杂度计算)题意​ 给定\(n\\le\9\times10^{18}\),给出式子\(n=p^2\timesq\),该式子必定有解且有唯一解。请输出\(p\)和\(q\)......