https://codeforces.com/contest/1733/problem/A
//注意写代码的技巧
#include<bits/stdc++.h>
using namespace std;
#define int long long
int v[200005];
signed main()
{
int tt;
cin>>tt;
while(tt--)
{
int n,m,ans=0;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>v[i];
for(int i=1;i<=m;i++)//把最大的放到前m个数
{
for(int j=i;j<=n;j+=m)//找一个位置能获得的最大值
if(v[i]<v[j])swap(v[i],v[j]);
ans+=v[i];
}
cout<<ans<<'\n';
}
}
https://codeforces.com/contest/1733/problem/B
//还是注意写代码的技巧
#include<bits/stdc++.h>
using namespace std;
#define int long long
int v[200005];
signed main()
{
int tt;
cin>>tt;
while(tt--)
{
int n,a,b;
cin>>n>>a>>b;
if(a>b)swap(a,b);//交换不影响结果,且更方便写代码
if(a!=0||b==0||(n-1)%b!=0){puts("-1");continue;}
for(int i=2;i<=n;i+=b)//对手
{
for(int j=1;j<=b;j++)//赢的人
cout<<i<<" ";
}
puts("");
}
}
https://codeforces.com/contest/1733/problem/C
//这题太狗了,不计操作次数
//把它全部变成一样的,这最简单想
#include<bits/stdc++.h>
using namespace std;
#define int long long
int v[200005];
signed main()
{
int tt;
for(cin>>tt;tt--;)
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>v[i];
}
if(n==1){puts("0");continue;}
int x=v[1];
cout<<n-1<<'\n';//每个数都变一下
cout<<1<<" "<<n<<'\n';//把第一个和最后一个变成一样的,输出操作位置
for(int i=2;i<=n-1;i++)
{
if((v[i]+x)&1)cout<<1<<" "<<i<<'\n';
else cout<<i<<" "<<n<<'\n';
}
}
}
https://codeforces.com/contest/1733/problem/D1
//2022/10/2补
//不得不说,毛爷yyds,还是我太笨了
//操作时,能不选相邻就不相邻
//什么时候一定要选相邻?当只有两个数,且两个数相邻时
//1 2 3 4需要操作,13操作,24操作即可
//俺可真笨
#include<bits/stdc++.h>
using namespace std;
#define int long long
pair<int,int>p[200005];
#define ft first
#define sd second
int vis[200005];
signed main()
{
int tt;
for(cin>>tt;tt--;)
{
for(int i=0;i<200005;i++)vis[i]=0;
//vector<int>v;
int n,x,y;
cin>>n>>x>>y;
string s1,s2;
cin>>s1>>s2;
int res=0,w=0;
for(int i=0;i<n;i++)
{
if(s1[i]!=s2[i])
{
res++;
vis[i]=1;
if(i-1>=0&&vis[i-1]==1)w++;
}
}
if(res==0){puts("0");continue;}
if(res&1){puts("-1");continue;}
int ans=0;
if(res==2&&w==1)ans=min(x,2*y);
else ans=res/2*y;
cout<<ans<<'\n';
}
}