UNIQUE VISION Programming Contest 2023 Christmas (AtCoder Beginner Contest 334)

UNIQUE VISION Programming Contest 2023 Christmas (AtCoder Beginner Contest 334)

A Christmas Present

分析

简单比较大小即可

代码

点击查看代码
void solve () {
	int n, m;
    cin >> n >> m;
	if (n > m) cout << "Bat" << endl;
	else cout << "Glove" << endl;
    return ;
}

B

分析

先直接计算,再微调

代码

点击查看代码
void solve () {
    ll a, m, l, r; cin >> a >> m >> l >> r;
    ll L = (l - a) / m, R = (r - a) / m;
    if (l > a && (l - a) % m != 0) L ++;
    if (r < a && (a - r) % m != 0) R --;
    cout << R - L + 1 << endl;
    return ;
}

C Socks 2

分析

贪心策略就是相邻的进行匹配,如果剩下来的总数为偶数,则直接顺序遍历给出答案,如果是奇数,则枚举是哪一个袜子没有匹配,同时通过前后缀和维护最小值

代码

点击查看代码
void solve () {
    int n, k; cin >> n >> k;
    vector<int> a(k + 10, 0), pre(k + 10, 0), suf(k + 10, 0);
    for (int i = 1; i <= k; i ++) cin >> a[i];
    for (int i = 2; i <= k; i += 2) 
    	pre[i] = pre[i - 2] + a[i] - a[i - 1];
    for (int i = k - 1; i >= 1; i -= 2) 
    	suf[i] = suf[i + 2] + a[i + 1] - a[i];
    if (k & 1) {
    	int ans = INF;
    	for (int i = 1; i <= k; i += 2) {
    		if (i & 1) {
    			ans = min(pre[i - 1] + suf[i + 1], ans);
    		} else {
    			ans = min(pre[i - 2] + suf[i + 2] + a[i + 1] - a[i - 1], ans);
    		}
    	}
    	cout << ans << endl;
    } else {
    	cout << pre[k] << endl;
    }
    return ;
}

D Reindeer and Sleigh

分析

水题 前缀和加二分

代码

点击查看代码
void solve () {
	int n, q; cin >> n >> q;
	vector<ll> a(n + 1), s(n + 1, 0);
 	for (int i = 1; i <= n; i ++) cin >> a[i];
 	sort(a.begin() + 1, a.end());
 	for (int i = 1; i <= n; i ++) {
 		s[i] = s[i - 1] + a[i];
 	}
 	while (q --) {
 		ll x; cin >> x;
 		int p = upper_bound(s.begin(), s.end(), x) - s.begin() - 1;
 		cout << p << endl;
 	}
    return ;
}

E Christmas Color Grid 1

分析

先求出连通块总数tot,考虑修改带来的影响,也即一个0变成1之后,连通块数量的变化,这一点可以通过维护每个点的连通块编号算出。最后用逆元算答案即可。

代码

点击查看代码
const int N = 1010;
int n, m; 
string g[N];
int id[N][N];
int tot;
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};

ll qmi(ll a, ll b) {
	ll res = 1;
	while (b) {
		if (b & 1) 
			res = (res * a) % mod;
			a = a * a % mod;
			b /= 2;
	}
	return res;
}

void dfs(int x, int y) {
	id[x][y] = tot;
	for (int i = 0; i < 4; i ++) {
		int xx = x + dx[i], yy = y + dy[i];
		if (xx >= 0 && xx < n && yy >= 0 && yy < m && g[xx][yy] == '#'  && id[xx][yy] == 0) dfs(xx, yy);
	}
}

void solve () {
    cin >> n >> m;
    for (int i = 0; i < n; i ++) 
    	cin >> g[i];
    for (int i = 0; i < n; i ++) 
    	for (int j = 0; j < m; j ++) {
    		if (!id[i][j] && g[i][j] == '#') {
    			tot ++;
    			dfs(i, j);
    		}
    	}
    ll cn = 0, num = 0;
    for (int i = 0; i < n; i ++) {
    	for (int j = 0; j < m; j ++) {
    		if (g[i][j] == '.') {
    			num ++;
    			set<int> s;
    			vector<int> v;
    			for (int k = 0; k < 4; k ++) {
    				int xx = i + dx[k], yy = j + dy[k];
    				if (xx >= 0 && xx < n && yy >= 0 && yy < m && id[xx][yy]) {
    					s.insert(id[xx][yy]);
    				}
    			}
    			cn += (tot - s.size() + 1);
    		}
    	}
    }
    cout << cn % mod * qmi(num, mod - 2) % mod << endl;
    return ;
}
posted @ 2023-12-24 00:24  ComistryMo  阅读(6)  评论(0编辑  收藏  举报