Ozon Tech Challenge 2020 (Div.1 + Div.2)

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





全部评论

相关推荐

当年还在美团那个倒霉的&nbsp;Peppr&nbsp;团队工作时,我一直有个疑问:这群人每天到底在自嗨什么。每次开会一堆人围着一堆“看起来很高级”的文档转,模板统一、名词复杂、页数感人,每一页都在暗示一件事:“你不懂,是因为你不专业。”但现实是——代码照样写在&nbsp;💩&nbsp;山上,该出问题还是会出问题,这真的很逗,系统一出问题,文档的唯一作用就是证明:“我们当初确实认真写过文档。”所以本质区别到底是什么?是代码质量提升了,还是大家在精神层面完成了一次“工程师&nbsp;cosplay”?有句话说得好潮水退去才知道谁在裸泳。还记得当时的马哥、明哥(图&nbsp;1&nbsp;左)最爱反复强调一句话:“所有场景一定要想到。”、“这个场景为什么没考虑到?”不过他们这些话我是真的听进去了。不然我也不会在一年多前就说:这个项目活不过两年。顺带一提,那段时间还有个固定节目。每次下楼,总能听见我明哥在吐槽不同的人。我从他身后绕过去,经常能听到他一边抽烟一边说:“xx&nbsp;这小子太坑了,回头我一定要跟马哥说说。”于是深谙人情世故但真不会抽烟的我也会从口袋掏出一支低尼古丁含量的烟给自己点上,假意自己什么都没听到什么都不知道,只是来抽烟的。后来我才明白,这可能也是团队文化的一部分:问题永远在别人身上,而我们,永远在复盘里😂。
秋招白月光
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务