Codeforces Round 925 (Div. 3)

时间:2024-02-16 11:46:11

比赛地址

Dashboard - Codeforces Round 925 (Div. 3) - Codeforces

A. Recovering a Small String

直接模拟

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define lowbit(x) (x&(-x))
#define sz(a) (int)a.size()
#define pb push_back
#define all(a) a.begin(), a.end()
#define int long long
typedef long long LL;
const int mod = 1e9+7;
const int N = 2e5+10;

using namespace std;

inline void solve(){
	int n ; cin >> n ;
	// a a z ; 28
	// a z z : 1 + 26 + 26 = 53
	if(n<=28){
		char c = (char)(n-3+'a') ;
		cout << "aa" <<c << endl; 
	}else if(n<=53){
		char c = (char)(n-28+'a');
		cout << "a" << c << "z" << endl;
	}else{
		char c = (char)(n-53+'a');
		cout << c << "zz" << endl;
	}
	return ;
}
 
signed main()
{
    IOS
    int _ = 1;
    cin >> _;
    while(_ --) solve();
    return 0;
}

B . Make Equal

模拟 , 从后往前遍历,t表示平均值 , 用 x 记录当前每个小于平均值的差 , 如果遇到一个值出现a[i]>t && a[i]-t>x,那么表示a[i]是不可能变成t的,后面需要的少于它多出来的;

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define lowbit(x) (x&(-x))
#define sz(a) (int)a.size()
#define pb push_back
#define all(a) a.begin(), a.end()
#define int long long
typedef long long LL;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;

using namespace std;

inline void solve() {
	int n ; cin >> n ;
	LL s = 0 ;
	vector<int> a(n+1) ;
	for(int i=1;i<=n;i++) {
		cin >> a[i] ;
		s += a[i] ;
	}
	LL t = s / n ;
	LL x = 0 ;
	bool tag = true ;
	for(int i=n;i>=1;i--){
		if(a[i] < t){
			x += t - a[i] ;
		}else{
			if(a[i]-t > x){
				tag = false;
				break;
			}
			x -= a[i] - t;
		}
	}
	if(tag) cout << "Yes" << endl;
	else cout << "No" << endl;
	
}

signed main()
{
    IOS
	int _ = 1;
    cin >> _;
    while (_--) solve();
    return 0;
}

C. Make Equal Again

模拟

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define lowbit(x) (x&(-x))
#define sz(a) (int)a.size()
#define pb push_back
#define all(a) a.begin(), a.end()
#define int long long
typedef long long LL;
const int mod = 1e9+7;
const int N = 2e5+10;

using namespace std;

inline void solve(){
	int n ; cin >> n ;
	vector<int> a(n+1);
	for(int i=1;i<=n;i++){
		cin >> a[i] ;
	}
	int i=1,j=n;
	int ans = 0 ;
	if(a[i]!=a[j]){
		while(i<=n&&a[i]==a[1]) i++;
		while(j>=1 && a[j]==a[n]) j--;
		ans = n - max(i-1,n-j);
	}
	else{
		while(i<=n && a[i]==a[1]) i++;
		while(j>=1 && a[j]==a[1]) j--;
		if(j<i) ans = 0 ;
		else ans = j - i + 1 ;
	}
	cout << ans << endl;
}
 
signed main()
{
    IOS
    int _ = 1;
    cin >> _;
    while(_ --) solve();
    return 0;
}

D. Divisible Pairs

哈希表解决!

对于( a + b ) % x = 0 , 那么a % x + b % x = 0 ;

对于(a - b)% y = 0 ,  那么a % y == b % y ;

如果知道上面的,那么这道题就很简单了 ;

用哈希表来存对应的pair<int,int>,表示 : {a[i]%x,a[i]%y} ;

    

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define lowbit(x) (x&(-x))
#define sz(a) (int)a.size()
#define pb push_back
#define all(a) a.begin(), a.end()
#define int long long
#define PII pair<int,int> 
typedef long long LL;
const int mod = 1e9+7;
const int N = 2e5+10;

using namespace std;

int a[N] ;

inline void solve(){
	int n , x , y ;
	cin >> n >> x >> y ;
	for(int i=1;i<=n;i++) cin >> a[i] ;
	int ans = 0 ;
	map<PII,int> mp;
	for(int i=1;i<=n;i++){
		// 求 x - a[i] % x 和 a[i ]% y 组成的pair前面有多少个 
		auto it = mp.find({(x-a[i]%x)%x,a[i]%y});
		if(it!=mp.end()){
			ans += it->second;
		}
		mp[{a[i]%x,a[i]%y}]++;
	} 
	cout << ans << endl;
}
 
signed main()
{
    IOS
    int _ = 1;
    cin >> _;
    while(_ --) solve();
    return 0;
}

E. Anna and the Valentine's Day Gift

贪心模拟题 ;

首先要清楚 : Anan选 后导0 最多的数消除后导0 , 然后Shasha是保护后导0最多的数 ;

遍历每一个元素,将后导0个数不为0的个数存起来,然后排序,然后每次最优都是减小最多的,减去那一部分,最后和m判断即可 ;

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
#define lowbit(x) (x&(-x))
#define sz(a) (int)a.size()
#define pb push_back
#define all(a) a.begin(), a.end()
#define int long long
typedef long long LL;
const int mod = 1e9+7;
const int N = 2e5+10;

using namespace std;

int a[N] ;

bool cmp(int x ,int y){
	return x > y ;
}

inline void solve(){
	// Anan选后导0最多的数消除后导0,然后Shasha是保护后导0最多的数
	int n , m ; cin >> n >> m ;
	LL cnt = 0 ;
	vector<int> b ;
	for(int i=1;i<=n;i++){
		int x ; cin >> x ;
		int zero = 0 ;
		while(x%10==0){
			zero++;
			x /= 10 ;
		}
		while(x){
			cnt ++;
			x /= 10 ;
		}
		if(zero) b.push_back(zero);
	}
	sort(b.begin(),b.end(),cmp);
	for(int i=1;i<b.size();i+=2){
		cnt += b[i];
	}
	if(cnt > m) cout << "Sasha" << endl;
	else cout << "Anna" << endl ;
	return ;
}
 
signed main()
{
    IOS
    int _ = 1;
    cin >> _;
    while(_ --) solve();
    return 0;
}