A. Kuroni and the Gifts

解题方法:这一题比较简单,题目要求两个数相加的和两两不同,我们只需要将他们排一下序输出即可
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<math.h>
#include<vector>
#include<stdio.h>
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read(){
	ll x=0,w=1;
	char ch=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	return w*x;
}//快读算法
int main(){
    int t,n;/*样例的个数*/
    scanf("%d",&t);
    int a[150],b[150];
    while(t--){
        scanf("%d",&n);/*女儿的数量*/
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=0;i<n;i++){
            scanf("%d",&b[i]);
        }/*数据输入完毕,下面开始处理数据*/
        sort(a,a+n);
        sort(b,b+n);
        for(int i=0;i<n;i++){
            printf("%d",a[i]);
            if(i<n-1){
                cout<< " ";
            }else{
                cout<<endl;
            }
        }
        for(int i=0;i<n;i++){
            printf("%d",b[i]);
            if(i<n-1){
                cout<< " ";
            }else{
                cout<<endl;
            }
        }
    }
    return 0;
}

B. Kuroni and Simple Strings

解题方法:这一题也比较简单,题目要求你删掉“简单序列”,并且要求进行最少次数。只要你从字符串的两边开始找即可,
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<math.h>
#include<vector>
#include<stdio.h>
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read(){
	ll x=0,w=1;
	char ch=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	return w*x;
}//快读算法
int check(char ar[]){
    int len=strlen(ar+1);/*所给字符串的长度*/
    int f=0;/*是否进行的标记*/
    int i=1,j=len;//从数组的两端开始
    while(i<=j){
        if(ar[i]=='('&&ar[j]!=')'){
            j--;
        }else if(ar[i]!='('&&ar[j]==')'){
            i++;
        }else if(ar[i]=='('&&ar[j]==')'){//存在最简字符串
            f=1;
            break;
        }else if(ar[i]!='('&&ar[j]!=')'){
            i++;
            j--;
        }
    }
    return f;
}
int main(){
    char ar[1010];
    char pr[1010];
    scanf("%s",ar+1);
    int t=1;
    for(int i=1;i<=strlen(ar+1);i++){
        pr[i]=ar[i];
    }
    int num=0;/*表示是删除的操作的次数*/
    while(check(ar)){/*表示进行删除操作*/
        num++;
        int i=1,j=strlen(ar+1);
        while(i<=j){
            if(ar[i]=='('&&ar[j]!=')'){
                j--;
            }else if(ar[i]!='('&&ar[j]==')'){
                i++;
            }else if(ar[i]=='('&&ar[j]==')'){/*表示这一次可以删除*/
                ar[i]='.';
                ar[j]='.';
                i++;
                j--;
            }else if(ar[i]!='('&&ar[j]!=')'){
                i++;
                j--;
            }
        }
    }/*求出次数*/
    int cnt=0;/*每次删除的数量*/
    cout<<num<<endl;
    while(check(pr)){
        cnt=0;
        int fb[1050]={0},g=0;
        int i=1,j=strlen(ar+1);
        while(i<=j){
            if(pr[i]=='('&&pr[j]!=')'){
                j--;
            }else if(pr[i]!='('&&pr[j]==')'){
                i++;
            }else if(pr[i]=='('&&pr[j]==')'){/*找到*/
                fb[g++]=i;
                fb[g++]=j;
                pr[i]='.';
                pr[j]='.';
                cnt=cnt+2;
                i++;
                j--;
            }else if(pr[i]!='('&&pr[j]!=')'){
                i++;
                j--;
            }
        }
        printf("%d\n",cnt);
        sort(fb,fb+g);
        for(int i=0;i<g;i++){
            printf("%d",fb[i]);
            if(i<g-1){
                cout<<" ";
            }else{
                cout<<endl;
            }
        }
    }
    return 0;
}

C. Kuroni and Impossible Calculation

https://codeforces.com/contest/1305/problem/C
解题方法:这一题比较坑,你要注意m的取值范围,这是这个题目的突破点,当n<m时,我们完全可以暴力做出来,

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<math.h>
#include<vector>
#include<stdio.h>
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read(){
	ll x=0,w=1;
	char ch=0;
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	return w*x;
}//快读算法
const ll max_n=2e5+5;
int main(){
    ll n,m;
    scanf("%d%d",&n,&m);/*n个数,对m取模*/
    ll num[max_n];
    for(int i=0;i<n;i++){
        scanf("%d",&num[i]);
    }/*数据输入完毕,下面开始处理数据*/
	if(n>m){
		cout<<0<<endl;
	}else{
		ll sum=1;
		for(int i=0;i<n;i++){
			for(int j=0;j<i;j++){
				sum=sum*abs(num[j]-num[i])%m;
			}
		} 
		printf("%lld\n",sum%m);
	}
    return 0;
}