1 条题解
-
0
自动搬运
来自洛谷,原作者为

4041nofoundGeoge
随缘壶关|同是天涯OIers,相逢何必曾相识! || 2025搬运于
2025-08-24 23:03:44,当前版本为作者最后更新于2024-09-13 19:44:44,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目大意
我看了半小时,发现这道题虽然看起来非常长,实则就可以归纳成几个重点。挑重点讲就是输入格式里的三段话:
接下来包含多行输入,每一行包含一个操作,操作类型共有以下三个:add、sync和query,各自的输入格式如下:
add element:表示这是一个添加操作,将元素 添加到队列中;sync follower_id:表示这是一个同步操作, 号副节点会从主节点中同步下一个自己缺失的元素;query:查询操作,询问当前分布式队列中有多少个元素具有可见性。
这三段用人话讲就是说:
add element:表示的是在头结点加入元素。sync follower_id:表示同步主节点,其实就是把follower_id的结点加一。query:表示找出结点中最小的副结点代表的个数。
在看一眼题目样例:非常好理解。
写代码前的讲究(c++)
- 尽量不用万能头文件
bits/stdc++.h因为会耗费很多资源。 - 尽量用
printf和scanf因为这比cout和cin更快。 - 用
while输入上面的几个操作符,因为你也不知道有多少行。
最后祝大家 AC 快乐
//java代码 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] cnt = new int[2000005]; while (scanner.hasNext()) { String s = scanner.next(); int waste = 0; if (s.equals("add")) { waste = scanner.nextInt(); // 读取但忽略 cnt[0]++; } else if (s.equals("sync")) { waste = scanner.nextInt(); cnt[waste]++; } else if (s.equals("query")) { int ans = 2000005; for (int i = 0; i < n; i++) { ans = Math.min(ans, cnt[i]); } System.out.println(ans); } } scanner.close(); //好习惯 } }//c++代码 //这道题给的数据很水,所以不开longlong也没事 #include<iostream> using namespace std; int cnt[2000005]; int main(){ int n; scanf("%d",&n); string s; int waste;//当输入add时用的减少资源浪费 while(cin>>s){ if(s=="add"){ scanf("%d",&waste); //因为是结点加东西,所以加了什么无所谓 cnt[0]++; } else if(s=="sync"){ scanf("%d",&waste); cnt[waste]++;//这个废物真正的用处 } else if(s=="query"){ //临时抱佛脚找到最短的长度就可以了 int ans=10000005; for(int i=0;i<n;i++)ans=min(ans,cnt[i]); printf("%d\n",ans); } } return 0; }
- 1
信息
- ID
- 10684
- 时间
- 3000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者