【备战昆明站】0307 做题越多,悲伤越多(cf775+上海站的题目)

距离昆明场33天

神啊,如果你真的存在的话,请允许我完成拿奖牌的小小心愿吧

到现在才知道memset并非是最快的,有时候手动会更快。

迟来的未知,究竟是一种幸运,还是一种不幸呢?

codeforces 775 div 2

https://codeforces.com/contest/1649

昨天下午打的,很是艰难。c题因为long long问题第一次被hack。

A. Game

题干太搞了,直接找离两边最近的0的位置,然后相减。

#include<bits/stdc++.h>
using namespace std;
const int N = 200;
bool a[N];
int main() {
	int tc;
	cin >> tc;
	while(tc--) {
		int n;
		cin  >> n;
		int l = -1, r = -1;
		for(int i = 1 ; i <= n ; i++) {
			cin >> a[i];
		}
		for(int i = 1 ; i <= n ; i++) {
			if(a[i] == 0) {
				l = i-1;
				break; 
			}
		}
		for(int i = n ; i >= 1 ; i--) {
			if(a[i] == 0) {
				r = i+1;
				break; 
			}
		}
		cout << r-l << endl;c++
	}
}

B. Game of Ball Passing

想复杂了。冥冥之中好像做过。我居然把他变成图论问题了。

府库咋此の梦达一你抗糖卡伊

#include<bits/stdc++.h>
using namespace std;
const int N = 3e5;
long long a[N];
long long diff[N];
int main() {
	int tc;
	scanf("%d",&tc);
	while(tc--) {
		int n;
		scanf("%d",&n); 
		for(int i = 1 ; i <= n ; i++)
			scanf("%lld",&a[i]);
		sort(a+1,a+n+1);
		long long sum = 0;
		for(int i = 1 ; i <= n ; i++) {
			sum += a[i];
		}
		if(sum == 0){
			cout << 0 << endl;
			continue;
		}
		sum++;
		sum -= (a[n] - a[n-1]);
		sum -= a[n-1]*2;
		if(a[n]-a[n-1] > sum) {
			cout << a[n]-a[n-1]-sum + 1 << endl;
		} 
		else cout << 1 << endl;
	}
}

C. Weird Sum

队友单开的题目。如果不是群友说前缀合我应该还会再做一会儿。。

还是靠我ac

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 +7;
vector<int>h[N],c[N];
int main() {
	long long sum;
//	scanf("%d",&tc);
//	while(tc--) {
	sum=0;
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i = 1 ; i <= n ; i++ ) {
		for(int j = 1 ; j <= m ; j++) {
			int t;
			scanf("%d",&t);
			h[t].push_back(j);
			c[t].push_back(i);
		}
	}
	for(int i = 1 ; i < N ; i++) {
		if(h[i].size() <= 1)
			continue;
		sort(h[i].begin() , h[i].end());
		sort(c[i].begin() , c[i].end());
		for(int j = 1 ; j < h[i].size() ; j++) {
			sum += (long long)(h[i][j]-h[i][j-1])*j*(long long)(h[i].size()-j);
			sum += (long long)(c[i][j]-c[i][j-1])*j*(long long)(c[i].size()-j);
		}
	}
	cout<<sum<<endl;
}

不过赛后被hack了,longlong问题。气死我了

我最终只过了两题:(

D. Integral Array

今早看明白的一题(其实不是很明白)

很是暴力,没有和队友一起思考,很是惋惜。cherry,私密马森。。

#include<bits/stdc++.h>
using namespace std;
const int N = 3e6 + 7;
long long pre[N],vis[N];
int main() {
	int tc;
	scanf("%d",&tc);
	while(tc--) {
		//	memset(pre,0,sizeof(pre));
		// memset(vis,0,sizeof(vis));
		int n,c;
		scanf("%d%d",&n,&c);
		memset(vis,0,8*3*c+1);
		for(int i = 1 ; i <= n ; i++ ) {
			int t;
			scanf("%d",&t);
			vis[t] = 1;
		}
		pre[0] = 0;
		for(int i = 1 ; i <= 3*c ; i++ ) {
			pre[i] = pre[i-1] + vis[i];//前缀合
		}
		if(vis[1] == 0) {
			printf("No\n");
			continue;
		}
		bool flag = 1;
		for(int r = 1 ; r <= c && flag; r++) {
			for(int y = 1 ; y*(r+1) <= 3*c ; y++) {
				if(!vis[y])
					continue;
				if(pre[(r+1)*y-1] -pre[(r*y-1)] && (!vis[r])) {
					flag = 0;
					break;
				}
			}
		}
		if(flag)
			printf("Yes\n");
		else printf("No\n");
	}
}
posted @ 2022-03-08 11:27  seekerHeron  阅读(39)  评论(0)    收藏  举报