Code jam Qualification Round 2020

做~自己de王妃 提交于 2020-04-30 00:41:43

#A Vestigium (7pts) https://codingcompetitions.withgoogle.com/codejam/round/000000000019fd27/000000000020993c?show=progress ##题解: t组数据。 每组数据给出一个n x n的矩阵,元素的取值都为1~n之间。 输出左对角线的和,每一行存在相同元素的行的个数,每一列存在相同元素的列的个数。 ##代码如下:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<math.h>
#include<map>
#define MAX 105
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int t,n;
int a[MAX][MAX],b[MAX];

int main(){
    scanf("%d",&t);
    for(int m=1;m<=t;m++){
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                scanf("%d",&a[i][j]);
            }
        }
        int sum=0,row=0,col=0;
        for(int i=0;i<n;i++){
            memset(b,0,sizeof(b));
            for(int j=0;j<n;j++){
                if(b[a[i][j]]==1){
                    row++;
                    break;
                }else{
                    b[a[i][j]]=1;
                }
            }
            memset(b,0,sizeof(b));
            for(int j=0;j<n;j++){
                if(b[a[j][i]]==1){
                    col++;
                    break;
                }else{
                    b[a[j][i]]=1;
                }
            }
        }
        for(int i=0;i<n;i++){
            sum+=a[i][i];
        }
        printf("Case #%d: %d %d %d\n",m,sum,row,col);
    }
    return 0;
}

#B Nesting Depth (5pts, 11pts) https://codingcompetitions.withgoogle.com/codejam/round/000000000019fd27/0000000000209a9f?show=progress ##题解: t组数据。 给出一个由数字'0'~'9'组成的字符串,要求给每一个数添加括号,括号的个数等于这个数的值。 我们用两个数组记录每个数左括号和右括号的个数,当一个数num1大于前一个数num2时,给这个数添加(num1-num2)个左括号,否则给前一个数添加(num2-num1)个右括号。 最后我们在最后一个数后面补足右括号的数量即可。 ##代码如下:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<math.h>
#include<map>
#define MAX 105
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int t;
string s;

int main(){
    cin>>t;
    int a[MAX],b[MAX],sum1,sum2;
    for(int m=1;m<=t;m++){
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        sum1=sum2=0;
        cin>>s;
        int len=s.length();
        a[0]=s[0]-'0',sum1+=a[0];
        for(int i=1;i<len;i++){
            if(s[i]>s[i-1]){
                a[i]=s[i]-s[i-1];
            }else{
                b[i-1]=s[i-1]-s[i];
            }
            sum1+=a[i],sum2+=b[i-1];
        }
        printf("Case #%d: ",m);
        for(int i=0;i<len;i++){
            for(int j=0;j<a[i];j++){
                cout<<"(";
            }
            cout<<s[i];
            for(int j=0;j<b[i];j++){
                cout<<")";
            }
        }
        for(int i=0;i<sum1-sum2;i++){
            cout<<")";
        }
        cout<<endl;
    }
    return 0;
}

#C Parenting Partnering Returns (7pts, 12pts) https://codingcompetitions.withgoogle.com/codejam/round/000000000019fd27/000000000020bdf9?show=progress ##题解: t组数据。 每组有n个活动,J和C两个人想参加所有的活动(只要两个人中有一个人参加了某个活动就代表这个活动有人参加了) 给出这些活动的开始和结束时间,需要你来寻找一个方案,来满足要求,并输出方案;若两个人不可能参与所有活动,则输出IMPOSSIBLE ##代码如下:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<math.h>
#include<map>
#define MAX 1005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int t,n;

struct node{
    int s,e,id,res;
}a[MAX];

bool cmp1(node a,node b){
    return a.s<b.s;
}

bool cmp2(node a,node b){
    return a.id<b.id;
}

int main(){
    scanf("%d",&t);
    for(int m=1;m<=t;m++){
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d%d",&a[i].s,&a[i].e);
            a[i].id=i;
        }
        sort(a,a+n,cmp1);
        bool flag=true;
        int end1=a[0].e,end2=0;
        a[0].res=0;
        for(int i=1;i<n;i++){
            if(a[i].s>=end1){
                a[i].res=0;
                end1=a[i].e;
            }else if(a[i].s>=end2){
                a[i].res=1;
                end2=a[i].e;
            }else{
                flag=false;
                break;
            }
        }
        printf("Case #%d: ",m);
        if(!flag) cout<<"IMPOSSIBLE"<<endl;
        else{
            sort(a,a+n,cmp2);
            for(int i=0;i<n;i++){
                if(a[i].res==0) cout<<"J";
                else cout<<"C";
            }
        }
        cout<<endl;
    }
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!