Помогите с задачей



Тест:
3
1 2
3 2
1 3
3 1
2 1
2 3

Не могу понять можно ли ставить в одно поле одни и те же команды но под разными цветами

Вот мой код

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back    
#define f first
#define s second
#define mp make_pair
#define sz(x) (int)x.size()
#define speed ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define rep(i, a, b) for(int i = a; i < b; i++)
#define all(x) x.begin(), x.end()
#define pii pair<ll, ll> 	 	 	
const ll INF = INT_MAX; 
map<pii, int> used;
int main() {
    speed;
   	int n;
   	cin>>n;
   	n*=2;
   	map<int, vector<int>> r;
   	map<int, vector<int>> w;
   	map<pii, int> pos;
   	set<int> ans;
   	
   	for(ll i = 0; i<n; i++){
   		ll u, b;
   		cin>>u>>b;
   		r[u].pb(b);
   		w[b].pb(u);
   		pos[{u, b}] = i + 1;
   		used[{u, b}] = 0;
   	}
   	if(n/2 == 2){
   		cout<<"YES\n";
   		cout<<pos[{1LL, 2LL}]<<" "<<pos[{2LL, 1LL}];
   		return 0;
   	}
	for(int i = 1; i<=n/2; i++){	
		int j = 0;
		for(; j<2; j++){
			if(!used[{i, r[i][j]}])break;
		}
		if(j == 2){
			cout<<"NO";
			return 0;
		}
		ans.insert(pos[{i, r[i][j]}]);
		used[{i, r[i][j]}] = 1;
		used[{r[i][j], i}] = 1;
		used[{w[r[i][j]][0], r[i][j]}] = 1;
		used[{w[r[i][j]][1], r[i][j]}] = 1;
	}
		cout<<"YES\n";
		for(auto i:ans)cout<<i<<"\n";

    return 0;
}

Тебе нужно выбрать игры так, чтобы в твоём наборе каждая команда была ровно один раз белой и ровно один раз красной.

3 лайка

У тебя просят выбрать игры так чтобы каждая команды сыграла на каждом поле по два раза. Команда должна сыграть на первом поле в красной и белой форме, и на втором поле в красной и белой форме.

3 лайка

Я изменил немного код. Не понимаю почему не проходит 3 тест.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define pb push_back    
#define X first
#define Y second
#define mp make_pair
#define speed ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define rep(i, a, b) for(int i = a; i < b; i++)
#define pii pair<int, int>
#define sz(x) (int)x.size()
const int MAXN = (int)1e5+5;
bool usedA[MAXN], usedB[MAXN];
int main() {
	speed;
	int n;
	cin>>n;
	set<int> ans;
	for(int i = 0; i < n * 2; i++){
		int u, v;
		cin>>u>>v;
		if(!(usedA[u] || usedB[v])){
			ans.insert(i + 1);
			usedA[u] = 1;
			usedB[v] = 1;
		}
	}
	if(sz(ans) == n){
		cout << "YES\n";
		for(auto i : ans){
			cout << i << "\n";
		}
	}else{
		cout << "NO";
	}
	return 0;
}   

Попробуй вот этот тест

4
1 2
2 3
2 1
1 4
3 4
4 3
3 1
4 2

Ответ :
YES
1
3
5
6

1 лайк

Решил?