因为各种原因,最近几天的做题量与强度有所下降,时间不多了希望未来可以更加努力,以此为戒
B

这一套的难度感觉划分的不太对,这个B题反而比C题难得多
这个B题的思维还是挺巧妙的,显然是个构造,我竟然没有想出来
异或这个知识点有时候和前缀和,后缀和联系挺紧密
构造规则是造一个数组1-n,ai
给出两个端点l,r在l,l+1,l+2,r这个区间里面,异或和为0,其余都不准为0
如果思考一个前缀和异或
F(a,b)=pre[a-1]^pre[b]
也就有
F(l,r)=pre[l-1]^pre[r]=0,也就是pre[l-1]=pre[r]
然后就没有了,我们强制规则一下这两个pre相等即可,然后pre[i]=i就可以解决问题,好巧妙
C
读题到Accepted只用了20分钟,这才是合格的acmer(虽然题目很水)

两个字符串你要把t排序一下,然后让t中存在子序列=s
你有两种选择往当前ans里面push S字符串的当前位置,或者push进去当前最小的其他不重要的字符
当时思考到问题就是在s字符穿内部把t的字符都插入进去,贪心一下即可
void solve(){string t,s,ans;cin>>s>>t;map<char,int>mp;for(auto it:t)mp[it]++;for(auto it:s){mp[it]--;if(mp[it]<0){cout<<"Impossible"<<endl;return ;}}vector<char>st;for(auto i='a';i<='z';i++)for(int j=1;j<=mp[i];j++)st.push_back(i);int stl=0,sl=0;while(ans.size()<t.size()){if(stl==st.size()){ans.push_back(s[sl++]);}else if(sl==s.size()){ans.push_back(st[stl++]);}else{if(st[stl]<s[sl]){ans.push_back(st[stl++]);}else{ans.push_back(s[sl++]);}}}cout<<ans<<endl;return ; }
D(待补)