首页 > 其他分享 >AtCoder Beginner Contest 298

AtCoder Beginner Contest 298

时间:2023-04-19 18:44:09浏览次数:40  
标签:AtCoder ch Beginner int auto read 298 getchar op

A - Job Interview

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

int main(){
	int n;
	string s;
	cin >> n >> s;
	if( s.find("x") != -1 ){
		printf("No\n");

	}else if( s.find("o") == -1 ){
		printf("No\n");
	}else printf("Yes\n");
	return 0;
}

B - Coloring Matrix

旋转三次然后暴力比较

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

const int N = 105;

int a[N][N] , b[N][N] , c[N][N];

int main(){
	int n;
	cin >> n;
	for( int i = 1 ; i <= n ; i ++ )
		for( int j = 1 ; j <= n ; j ++ )
			cin >> a[i][j];
	for( int i = 1 ; i <= n ; i ++ )
		for( int j = 1 ; j <= n ; j ++ )
			cin >> b[i][j];
	for( int k = 4 ; k ; k -- ){
		bool f = true;
		for( int i = 1 ; f && i <= n ; i ++ ){
			for( int j = 1 ; f && j <= n ; j ++ ){
				if( a[i][j] == 1 && b[i][j] != 1 ) f = false; 
			}
		}
		if( f ) return printf("Yes\n") , 0;
		for( int i = 1 ; i <= n ; i ++ )
			for( int j = 1 ; j <= n ; j ++ )
				c[n+1-j][i] = a[i][j];
		for( int i = 1 ; i <= n ; i ++ )
			for( int j = 1 ; j <= n ; j ++ )
				a[i][j] = c[i][j];
	}
	printf("No\n");
	return 0;
}

C - Cards Query Problem

整两个set数组维护一下就好了,注意 box 中的 card 要用 multiset维护,因为会重复

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

int read(){
	int ch = getchar() , x = 0;
	while( ch < '0' || ch > '9' ) ch = getchar();
	while( ch >= '0' && ch <= '9' ) x = (x<<3)+(x<<1) + ch - '0' , ch = getchar();
	return x;
}

const int N = 2e5+5;
int n;
multiset<int> box[N];
set<int> card[N];

int main(){
	int n = read() , q = read();
	for( int op , x , y ; q ; q -- ){
		op = read();
		if( op == 1 ){
			x = read() , y = read();
			box[y].insert(x) , card[x].insert(y);
		}else{
			x = read();
			if( op == 2 ){
				for( auto i : box[x] ) printf("%d " , i );
			}else{
				for( auto i : card[x] ) printf("%d " , i );
			}
			printf("\n");
		}
	}

}

D - Writing a Numeral

其实只要知道每个数被乘十了多少次就很好算了

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

#define int long long

int read(){
	int ch = getchar() , x = 0;
	while( ch < '0' || ch > '9' ) ch = getchar();
	while( ch >= '0' && ch <= '9' ) x = (x<<3)+(x<<1) + ch - '0' , ch = getchar();
	return x;
}

const int mod = 998244353;

int power( int x , int y ){
	int ans = 1;
	while( y ){
		if( y & 1 ) ans = ans * x % mod;
		x = x * x % mod , y >>= 1;
	}
	return ans;
}

int32_t main(){
	vector<int> dq;
	int pos = 0;
	dq.push_back(1);
	int cnt = 1 , q = read();
	for( int op , x ; q ; q -- ){
		op = read();
		if( op == 1 ){
			x = read();
			cnt = (cnt * 10 % mod + x) % mod;
			dq.push_back(x);
		}else if( op == 2 ){
			x = dq[pos++];
			x = mod - x * power( 10 , dq.size() - pos ) % mod;
			cnt = ( cnt + x ) % mod;
		}else printf("%lld\n" , cnt);
	}

}

F - Rook Score

首先用map统计一下每一行每一列的和。然后考虑枚举(r,c)。这里可以分成两类情况。

第一种(r,c)位置上的值不是 0,此时枚举所有的点就好。

第二种(r,)位置上的值是 0 ,首先把所有的行列都取出来按照和从大到小排序。然后枚举行行列,如果找到了(r,c)不存在的情况就更新答案并 break,因为已经排序后面找到一定更小。

#include<bits/stdc++.h>

using namespace std;

#define int long long
typedef long long ll;

int read() {
    int x = 0, f = 1, ch = getchar();
    while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
    if (ch == '-') f = -1, ch = getchar();
    while (ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
    return x * f;
}

int32_t main() {
    int n = read();
    map<int, int> cntR, cntC;
    map<int, map<int, int>> val;
    set<pair<int, int>> st;
    for (int x, y, w; n; n--) {
        x = read(), y = read(), w = read();
        cntR[x] += w, cntC[y] += w, val[x][y] = w, st.emplace(x, y);
    }
    vector<pair<int, int>> r, c;
    for (auto [k, v]: cntR) r.emplace_back(v, k);
    for (auto [k, v]: cntC) c.emplace_back(v, k);
    sort(r.begin(), r.end(), greater<pair<int, int>>());
    sort(c.begin(), c.end(), greater<pair<int, int>>());
    int res = 0;
    for (auto [x, y]: st)
        res = max(res, cntR[x] + cntC[y] - val[x][y] );
    for( auto [ v1 , x ] : r )
        for( auto [ v2 , y ] : c ){
            if( st.count(make_pair(x,y) ) ) continue;
            res = max( res , v1 + v2 );
            break;
        }
    cout << res << "\n";
    return 0;
}

标签:AtCoder,ch,Beginner,int,auto,read,298,getchar,op
From: https://www.cnblogs.com/PHarr/p/17334309.html

相关文章

  • Atcoder Regular Contest 118 E - Avoid Permutations(容斥+DP)
    挺套路的DP。第一步是显然的:转换贡献体,DP一条从\((0,0)\)到\((n+1,n+1)\)的路径,然后计算有多少个排列满足这条路径不经过任何一个\((i,p_i)\)。正着统计肯定不好求,考虑容斥。即我们钦定一些路径上的点,满足这些点必须对应某个\((i,p_i)\),然后计算有多少个\(p\)符合这个......
  • Apache Tomcat拒绝服务漏洞 CVE-2022-29885
    【预警类型】中危预警【预警内容】ApacheTomcat拒绝服务漏洞 CVE-2022-29885漏洞编号:CVE-2022-29885一、漏洞概述2022年7月2日,安全团队监测到一则ApacheTomcat 拒绝服务漏洞的信息。该漏洞是由于Tomcat开启集群配置中存在缺陷,攻击者可利用该漏洞在未权限的情况下,构造恶意......
  • AtCoder Regular Contest 109 E 1D Reversi Builder
    洛谷传送门AtCoder传送门考虑固定\(s\)和每个格子的颜色,最终有多少个石子被染黑。结论:任何时刻只有不多于两个极大同色连通块。证明:设\([x,y]\)为当前的黑连通块,\([y+1,z]\)为白连通块。如果下一次染\(x-1\),若\(x-1\)为白,则\([x-1,z]\)都被染为白;否则\(x-1\)被......
  • AtCoder Regular Contest 109 D L
    洛谷传送门AtCoder传送门这种题根本做不出来……考虑一个L形怎么方便地表示出来。可以发现对于组成L形的三个点\((x_1,y_1),(x_2,y_2),(x_3,y_3)\),只要知道\(x=x_1+x_2+x_3\)和\(y=y_1+y_2+y_3\),就能确定三个坐标。证明是设折点坐标为\((p,q)\),则其余两......
  • AtCoder Regular Contest 106 F Figures
    洛谷传送门AtCoder传送门晚自习的时候胡出来的做法(((首先你会发现题目等价于求\(\sum\limits_{(\sum\limits_{i=1}^na_i)=2(n-1)\land\foralli\in[1,n],1\lea_i\led_i}\prod\limits_{i=1}^n\dfrac{d_i!}{(d_i-a_i)!}\)。翻译一下就是枚举每个点的度数\(a_i\)......
  • ABC297F AtCoder Beginner Contest 297 F - Minimum Bounding Box 2
    https://atcoder.jp/contests/abc297/tasks/abc297_f在\(n\timesm\)的棋盘上放置\(k\)个棋子,记矩形A为能覆盖所有\(k\)个棋子的最小的矩形,求A的面积的期望将问题反过来考虑,枚举每种矩形有多少种放置棋子的方案,对于一个\(n\timesm\)的矩形,我们可以用容斥的方法......
  • AtCoder Beginner Contest 295
    ThreeDaysAgo我们定义一个只由数字构成的字符串中的字符能够被重排成相同的两份,我们称这个字符串是个好字符串,比如12341234现在给定一个字符串\(S\),找出所有的\([l,r]\),使得在这段区间中的子段是个好字符串题解:思维+组合计数首先我们根据题意得到:一个好字符串中所有相......
  • Atcoder题解:Agc002_f
    我们可以把这个理解成一种类似卡塔兰数的形式,我们发现,被安排的\(0\)球总数\(i\)和已经出现的颜色种数\(j\)在任意时刻都必须满足\(i\gej\)。然后就可以\(dp\)了,我们每次钦定下一个转移的球是某种颜色。如果下一个转移的球不是\(0\),那么我们就一次性把后面所有这种颜色......
  • Atcoder题解:Agc004_e
    \[吓死我了,还以为写了半天的被自己删掉了\]\[但是\text{Ctrl+S}会保存草稿啊\]\[以后一定要保留这个好习惯\]第一步转化题意,我们把“所有机器人移动”转化成“出口带着边框移动”,而在出口运动过程中超出边框的机器人,就“死”了。然后我们发现,出口运动过程中,假设出口目前走到......
  • Atcoder题解:Agc013_e
    我们考虑转化题意,一个合法的将\(1\simN\)划分成长度依次为\(a_1,a_2,\cdotsa_k\)的小区间,对答案的贡献为\(a_1^2a_2^2\cdotsa_k^2\)。化贡献为方案数,我们在每个长度为\(a_i\)的小区间内放置两个独立的标记,每个合法的划分方案对放置标记方案种数的贡献恰好是其对最终答......