列表

详情


MGJ4. 投篮游戏

描述

有一个投篮游戏。球场有p个篮筐,编号为0,1...,p-1。每个篮筐下有个袋子,每个袋子最多装一个篮球。有n个篮球,每个球编号xi 。规则是将数字为xi 的篮球投到xi 除p的余数为编号的袋里。若袋里已有篮球则球弹出游戏结束输出i,否则重复至所有球都投完。输出-1。问游戏最终的输出是什么?

输入描述

第一行两个整数p,n(2≤p,n≤300)。p为篮筐数,n为篮球数。接着n行为篮球上的数字xi(0≤xi≤1e9)

输出描述

输出游戏的结果

示例1

输入:

10 5
0
21
53
41
53

输出:

4

原站题解

C++ 解法, 执行用时: 1ms, 内存消耗: 368KB, 提交时间: 2017-07-29

#include<iostream>
#include<vector>

using namespace std;

int main()
{
    int p,n;
    int i;
    while(cin>>p>>n)
    {
        vector<int > b(p,0),x(n+1);
        int r,f=0;
        for(i=1;i<=n;i++)
            cin>>x[i];
        for(i=1;i<=n;i++)
        {
            r=x[i]%p;
            if(b[r])
            {
                cout<<i<<endl;
                f=1;
                break;
            }
            else
                b[r]=1;
        }
        if(!f)
            cout<<-1<<endl;
    }
    
    
    return 0;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 504KB, 提交时间: 2020-10-31

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int p,n;
    while(cin>>p>>n)
    {
        bool flag=true;
        int ball[n];
        vector<bool> num(p,false);
        for(int i=0;i<n;i++)
        {
            cin>>ball[i];
        }
        for(int i=0;i<n;i++)
        {
            if(num[ball[i]%p])
            {
                cout<<i+1<<endl;
                flag=false;
                break;
            }
            num[ball[i]%p]=true;
        }
        if(flag)
            cout<<-1<<endl;
    }
    return 0;
}

C 解法, 执行用时: 3ms, 内存消耗: 236KB, 提交时间: 2018-12-29

#include <stdio.h>
#include <string.h>

int p, n;
int xi[301];
char used[301];

int main(int argc, char *argv[])
{
    int i, j;
    
    while(scanf("%d%d", &p, &n) == 2)
    {
        for(i = 0; i < n; i++)
        {
            scanf("%d", &xi[i]);
        }
        for(i = 0; i < n; i++)
        {
            j = xi[i] % p;
            if(used[j] == 0)
            {
                used[j] = 1;
            }
            else
            {
                printf("%d\n", i + 1);
                break;
            }
        }
        if(i == n || n == 0)
        {
            printf("%d\n", -1);
        }
        memset(used, 0, sizeof(used));
    }
    
    return 0;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 380KB, 提交时间: 2020-10-31

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int p,n;
    while(cin>>p>>n)
    {
        bool flag=true;
        int ball[n];
        vector<bool> num(p,false);
        for(int i=0;i<n;i++)
        {
            cin>>ball[i];
        }
        for(int i=0;i<n;i++)
        {
            if(num[ball[i]%p])
            {
                cout<<i+1<<endl;
                flag=false;
                break;
            }
            num[ball[i]%p]=true;
        }
        if(flag)
            cout<<-1<<endl;
    }
    return 0;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 392KB, 提交时间: 2022-06-28

#include <iostream>
#include <vector>
using namespace std;
int main(){
    int p,n;
    while(cin>>p>>n){
        vector<int> f(p,0);
        int x,y;
        int count =-1;
        for(int i=0;i<n;++i){
            cin>>x;
            y = x%p;
            if(f[y]!=0 && count==-1){
                count =i+1;
            }
            f[y] = x;
        }
        cout<<count<<endl;
    }  
}

上一题