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; }