https://atcoder.jp/contests/abc278/tasks/abc278_c

C - FF (atcoder.jp)

补题

题意:n个人,q个操作

输入  t a b

t=1 a跟随b

t=2 a不跟随b

t=3 查询a是否跟随b同时b跟随a

ps:一个人能跟多个人

错误分析(一开始以为一个人只能跟一个人,并且存在传递跟随)

并且不知道map可以做个二维出来;qwq

#include<bits/stdc++.h>
using namespace std;
map<int ,map<int,int> >m;
int main(){
	int t,a,b,n,q;
	cin>>n>>q;
	m.clear();
	for(int i=0;i<q;i++){
		cin>>t>>a>>b;
		if(t==1){
			m[a][b]=1;
		}
		else if(t==2){
			if(t==2){
				if(m[a][b]==1){
					m[a][b]=0;
				}
			}
		}
		else if(t==3){
//			int k=m[a],flag=0;
			cout<<m[a]<<"\n";
//			while(k!=a&&k!=0){
				cout<<k<<"\n";
//				if(k==b){
//					
//					flag++;
					cout<<"\n";
//					break;
//				}
//				k = m[k];
//			}
//			k = m[b];
//			while(k!=b&&k!=0){
				cout<<k<<"\n";
//				if(k==a){
//					flag++;
					cout<<"\n";
//					break;
//				}
//				k = m[k];
//			}
			cout<<flag<<"\n";
//			if(flag==2){
//				cout<<"Yes\n";
//			}
			if(m[a][b]==1&&m[b][a]==1){
				cout<<"Yes\n";
			}
			else{
				cout<<"No\n";
			}
		}
	} 
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【問題概要】 縦 $H$ 行、横 $W$ 列のマスがあります。 上から $i$ 行目、左から $j$ 列目のマスを $(i,j)$ とします。 最初、すべてのマスは白色であり、マス $(i,j)$ は $C_{i,j}$ という文字が書かれています。 あなたは、以下の操作を好きな回数だけ行うことができます。 操作: 黒色を塗られたマス $(i,j)$ を選び、以下のいずれかの操作を行う。 (1) $C_{i,j}$ を $1$ 減らす。 (2) $C_{i,j}$ を $1$ 増やす。 ただし、この操作を行う際には、必ずしも $C_{i,j}$ が $0$ 以上である必要はありません。 操作後、すべてのマスが白色になっている場合、操作回数の最小値を求めてください。 【制約】 ・$1 \leq H,W \leq 50$ ・$0 \leq C_{i,j} \leq 10^{9}$ ・$C_{i,j}$ は整数である。 ・少なくとも $1$ つのマスには文字が書かれている。 【入力】 入力は以下の形式で標準入力から与えられる。 $H$ $W$ $C_{1,1}$ $C_{1,2}$ ... $C_{1,W}$ $C_{2,1}$ $C_{2,2}$ ... $C_{2,W}$ ... $C_{H,1}$ $C_{H,2}$ ... $C_{H,W}$ 【出力】 操作回数の最小値を出力せよ。 【入力例】 3 3 3 1 4 1 5 9 2 6 5 【出力例】 2 【入力例】 3 3 1 1 1 1 1 1 1 1 1 【出力例】 0 【入力例】 4 4 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 【出力例】 2 【入力例】 5 5 0 0 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 【出力例】 0 【解法】 まず、全体の合計を求めます。 次に、全体の合計が $0$ の場合、操作回数は $0$ となります。 全体の合計が $1$ 以上の場合、以下の操作を行います。 1. 全体の合計を $2$ で割り、切り捨てた値を $S$ とします。 2. 全体の合計が奇数の場合、$S$ を $1$ 増やします。 3. 以下の操作を繰り返します。 1. 最大値を取るマスを選び、そのマスの値を $2$ 減らします。 2. 上記操作によって、全体の合計が $S$ 以下になる場合、操作回数を出力して終了します。 上記操作によって、全体の合計が $S$ 以下になることが証明できます。 また、上記操作によって操作回数が最小になることが証明できます。 【コード】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值