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



京公网安备 11010502036488号