根据官方讲题写的题解
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;
}