根据官方讲题写的题解
B
一开始自己的思路就是分奇偶数组
while (t--) { int n; cin >> n; vector<int> evens, odds;//分组 for (int i = 0; i < n; i++) { int num; cin >> num; if (num % 2 == 0) {//检测奇偶 evens.push_back(num); } else { odds.push_back(num); } } sort(evens.begin(), evens.end());//排序 sort(odds.begin(), odds.end()); for (int e : evens) {//先输出偶数 cout << e <<' '; } for (int o : odds) {//再奇数 cout << o <<' '; } cout << endl; }看了视频之后 知道可以用 分出奇数之后加一个很大的数的方式 让奇数沉底
while(t--){ int n; cin>>n; vector<int> all(n);//一定要记得分配内存啊 for(int i=0;i<n;i++){ cin>>all[i]; if(all[i]%2) all[i]+=1e9; } sort(all.begin(),all.end()); for(int i=0;i<n;i++){ if(all[i]%2) all[i]-=1e9; cout<<all[i]<<" "; } cout<<endl; }C
比赛的时候没写出来 听了视频感觉有点理解了 再次细读题发现一些端倪
实际上 数组{1,2}和{2,1}是不同的数组 也就是说 如果一个数组是{1,1,1,1}
进行题目里面的操作 只是选2个相邻的数 不需要担心 {1,1,2}和{1,2,1}不是一个数组
因为是选相邻的数 所以就是在相邻的数里面选一个决策 加或者不加
不同的合并选择产生的数组要么长度不同,要么元素序列不同。所以元素值不影响不同性,只影响数组的具体值,但既然我们关心的是本质不同,即数组序列是否相同,而不同的选择总是产生不同的序列,所以答案只取决于n。
所以事实上 只需要输出 2的n-1次方对998244353取模 的数就可以了
while(t--){ int n; cin >> n; vector<int> a(n + 1); for(int i = 1; i <= n; i++){ cin >> a[i]; } n--; cout << ksm(2LL, n, MOD) << endl; }