顺序根据过题人数由多至少排列

L-牛牛学走路

#include <bits/stdc++.h>
using  namespace std;
int main(){
	int t,n,m;
	cin>>t;
	for(int i=0;i<t;i++){
		string str;
		cin>>n;
		cin>>str;
		double x=0,y=0,max=0,dis;
		for(int j=0;j<n;j++){
			if(str[j]=='U'){
				y++;
			}else if(str[j]=='D'){
				y--;
			}else if(str[j]=='L'){
				x--;
			}else if(str[j]=='R'){
				x++;
			}
			dis=sqrt(x*x+y*y);
			max=max>dis?max:dis;
		}
		printf("%.12f\n",max);
	} 
} 

E-炸鸡块君的高中回忆

#include <bits/stdc++.h>
using  namespace std;
int main(){
	int t,n,m;
	cin>>t;
	for(int i=0;i<t;i++){
		cin>>n>>m;
		if(n==m) cout<<1<<endl;
		else if(m==1) cout<<-1<<endl;
		else{
            int ans=(n-m)/(m-1)*2+1;
            if((n-m)%(m-1)!=0) ans+=2;
            cout<<ans<<endl;
		}
	} 
} 

J-小朋友做游戏

#include <bits/stdc++.h>
using namespace std;
int vc[200005];
int a,b,n,va[10005],vb[10005];
void merge(int ra,int rb,int va[],int vb[],int vc[]){
	int i=0;
	for(int j=0;j<ra;j++){
		vc[i++]=va[j];
	}
	for(int j=0;j<rb;j++){
		vc[i++]=vb[j];
	}
	return ;
}
int main(){
	int t;
	cin>>t;
	for(int i=0;i<t;i++){//1000
		cin>>a>>b>>n;
		for(int j=0;j<a;j++) cin>>va[j];//10000
		sort(va,va+a);
		for(int j=0;j<b;j++) cin>>vb[j];//10000
		sort(vb,vb+b);
		if(2*a<n) cout<<-1<<endl;
		else{
            memset(vc,0,sizeof(vc));
			int ans=0;
			//从a里选的一定要多于半数
			for(int j=a-1;j>a-(n+1)/2-1;j--){//10000
				ans=ans+va[j];
			}
			//此时的ans是必选的va总和
			merge(a-(n+1)/2,b,va,vb,vc);//10000
			int cr=a+b-1;
			sort(vc,vc+cr);
			for(int j=cr-1;j>cr-n/2-1;j--){//100000
				ans=ans+vc[j];
			}
			cout<<ans<<endl;
		}
	}
}

F-中位数切分

//题目说每一段有需要大于等于m
#include<bits/stdc++.h>
using namespace std;
int main(){
	int T;
	cin>>T;
	while(T--){
		int n,m;
		cin>>n>>m;//数组长度为n,中位数要大于m
		int cnt1=0,cnt2=0;//两个计数器
		for(int i=0;i<n;i++) {//遍历数组a
			int x;
            cin>>x;//输入数组a中的数字
			if(x<m) cnt1++;//cnt1记录小于整数m的个数
			else cnt2++;//cnt2记录大于整数m的个数
		}
		if(cnt2>cnt1) cout<<cnt2-cnt1<<endl;//大于m的和小于m的相互抵消,剩下的作为每组的中位数即可得到最多的要求组数
		else cout<<"-1"<<endl;//因为说偶数个数的中位数是两个中小的那个,这就要求只有大于m的数的个数大于小于m的个数时,才满足条件
	} 
}

H-牛牛看云

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a[1000010],cnt[1010],ans=0;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        cnt[a[i]]++;//记录每个数字的个数
    }
    for(int i=0;i<=1000;i++){//遍历每个可能出现的数字0~1000
        for(int j=i;j<=1000;j++){
            ll add;//倍数
            if(i==j) add=cnt[i]*(cnt[i]+1)/2;//相同的数字相加的倍数
            else add=cnt[i]*cnt[j];
            ans+=add*abs(i+j-1000);
        }
    }
    cout<<ans;
}

A-九小时九个人九扇门

#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
int n,a[100010],dp[100010][10];
int main(){
    cin>>n;//输入主人公的数量
    for(int i=1;i<=n;i++){
        cin>>a[i];//记录第i个主人公手表的数字
        a[i]%=9;//一个数模9就是它的数字根,但9有些不一样,将它的数字根看做0
    }
    for(int i=1;i<=n;i++){//遍历每个数字1~n
        for(int j=0;j<9;j++){
            dp[i][(j+a[i])%9]=(dp[i-1][(j+a[i])%9]+dp[i-1][j])%mod;//前i个数字能组成的方案数
            cout<<dp[i][(j+a[i])%9]<<" ";
        }
        dp[i][a[i]]++;//加上第i个数后,a[i]的方案自然多一种
        cout<<endl;
    }
    for(int j=1;j<=9;j++){
        cout<<dp[n][j%9]<<' ';
    }
}