<-----(麻烦点一下这个)
先设一个数组x,初始化$x_i$为$i$。
然后模拟交换的过程,也就是$swap(x_a, x_b)$。
同时交换后要记得累计一下答案,最后三个果壳中被猜的次数的最大值就是最大可能的得分,也就是答案。
代码也很容易写呀hh,不懂的可以评论区和我讨论~
#include <bits/stdc++.h>
using namespace std;
int n, x[5], cnt[5];
int main() {
for (int i = 1; i <= 3; i++) x[i] = i; //初始化
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
int a, b, c; scanf("%d%d%d", &a, &b, &c);
swap(x[a], x[b]); //模拟交换过程
cnt[x[c]]++; //猜c,并且累加次数
}
printf("%d", max({cnt[1], cnt[2], cnt[3]})); //取最大值,也就是获得的最大得分
return 0;
}
大佬我为啥A不了?
大佬为什么我这个a不了
### 1、 读入有问题:
要求读入 $n$ 组 $a,b,g$ ,你在外面又套了一层循环
### 2、没有记录鹅卵石在 $n$ 次操作中的不断改变的位置
谢谢大佬~
cnt[x[c]]++ 好6
就是累加答案hh
x[i] = i理解为第i个位置放的是编号为i的果壳会不会更好些:比如第一个位置放的是1号果壳,和2号swap之后,就是第一个位置放2号果壳了
不是猜对果仁的位置才能得分吗?为什么可以直接累加来求最高得分?
对呀,但是你想想我们这是猜测,因为我们猜中最多次数的果壳位置,如果正好是答案那么贡献值不是最多吗?
x[i]=i的是为啥那样的啊,大佬救命,不懂 啊555~
就是编号为i的果壳初始的时候在i这个位置
大佬,666
我在首页看到的
我:咋没反应???
(逃)
额
这做法秀啊,突然感觉我的好复杂…………
# include [HTML_REMOVED]
using namespace std;
const int N = 105;
int p[4];
typedef pair[HTML_REMOVED]pii;
pii m[N];
int res[4];
int main ()
{
map[HTML_REMOVED]mp;
int n;
cin >> n;
for(int i = 1;i <= n;i )
{
int x, y, z;
cin >> x >> y >> z;
m[i] = {x,y};
mp[{x,y}] = z;
}
for(int i = 1;i <= 3;i )
{
memset(p, 0, sizeof(p));
p[i] = 1;
int ans = 0;
for(int j = 1;j <= n;j )
{
int x = m[j].first, y = m[j].second;
swap(p[x], p[y]);
if(p[mp[{x, y}]] == 1)ans ;
}
res[i] = ans;
}
int sum = 0;
for(int i = 1;i <= 3;i ++)
{
sum = max(sum, res[i]);
//cout << res[i] << endl;
}
cout << sum;
return 0;
}
咱俩差不多为什么我这个a不了兄弟
您好,您可以重新发一下代码吗,就用键盘上‘1’左边的那个点,用英文输入方式,打三个,换行之后再把代码粘贴下来,再换行,输入同样的三个点,这样代码的呈现方式就和我上面一样了。不然的话这格式,还有代码的内容都会出现一定的问题
兄弟,兄弟,康康我代码,指正一下
您的思路应该是没有问题的。但是,您看您这里用一个map,将二元组映射为一个整型变量,而这个二元组代表的是两个位置的果壳的交换关系。但是,在一组数据里面,可能会出现两次相同位置的两个果壳的位置交换(例如此代码WA掉的那个样例中,2 3两个位置的果壳的位置交换重复出现),如果用你的这种方法,就会导致后出现的会把先前出现的给覆盖掉。于是导致了答案的错误。所以我认为修改代码应该从映射所猜测的坚果壳位置入手。比如像我上面的代码一样,干脆就用一个长度为n的数组来存储每一次猜测的位置,枚举时就直接用for循环从1循环到n,就不会出现这样的问题了(问题应该就出在这里)
没错兄弟我懂了
我还是不理解cnt[x[c]]?为什么这样做就是答案?哪位大佬教教我
就是这个果壳被选中的次数,例如$cnt_i$是果壳$i$的选中次数。
你可以想想呀,如果答案是被选中次数最多的那个果壳,那么得分就一定是最高的。
所以我们输出最多的那个选中次数。
不理解的话可以再留言,我看到会回复。
感谢大佬,理解了。
拜托,拜托,可以再说详细一点吗,看了好几遍,还是没有看懂,就是这个cnt[x[c]],最后三个果壳中被猜的次数的最大值就是最大可能的得分,还是有点懵
em……就是如果真的答案就是被猜的次数最大值,那么不是结果的得分就最大吗?
谢谢你,啊啊,看懂了,看懂了
嗯嗯,加油!
话说你学我
hhh
这思路是怎么想到啊,蒟蒻只会暴力模拟
从问题的方向入手,题目的主要特点是交换,所以我们就可以想到模拟交换~
想到这一步就可以知道“最优解”如何推出,也就是被选中次数最多的那个果壳。
tql, %%%
哈哈,学我的求赞方式
hhhhhhh