zoukankan      html  css  js  c++  java
  • poj 3370 Halloween treats

    题目链接:http://poj.org/problem?id=3370

    题意:每组给你一个数c和一个数m,输入m个数,让你输出若干个数的下标,这些数加起来可以整除c(c小于等于n),鸽巢原理同样适用,

    需要注意的是,sum可能会溢出int, 并且用scanf读入防止超时。

    代码:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <math.h>
    #include <iostream>
    #include <string>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <algorithm>
    #define N 100000+100
    
    using namespace std;
    
    int a[N];
    long long int sum[N];
    int yu[N];
    
    struct node
    {
        bool k;
        int pos;
    
    }q[N];
    
    
    int main()
    {
        int n, c;
        int i, j;
        int left, right;
    
        while(~scanf("%d %d", &c, &n))
        {
            if(c==0 && n==0) break;
            bool flag1=false;
            bool flag2=false;
    
            for(i=0; i<n; i++){
                scanf("%d", &a[i] );
                if(i==0) sum[i]=a[i];
                else sum[i]=sum[i-1]+a[i];
            }
            left=0;
            memset(q, 0, sizeof(q));
    
            for(i=0; i<n; i++){
                yu[i]=sum[i]%c;
                if(yu[i]==0){
                    flag1=true; right=i; break;
                }
                else{
                    if(q[yu[i]].k ){
                        flag2=true;
                        left=q[yu[i]].pos; right=i; break;
                    }else{
                        q[yu[i]].k=true; q[yu[i]].pos=i;
                    }
                }
            }
            if(flag1){
                //printf("%d
    ", right+1 );
                for(i=0; i<=right; i++){
                    if(i==0) printf("%d", i+1 );
                    else printf(" %d", i+1);
                }
                printf("
    ");
            }
            else if(flag2){
                //printf("%d
    ", right-left );
                for(i=left+1; i<=right; i++){
                    if(i==left+1) printf("%d", i+1);
                    else printf(" %d", i+1 );
                }
                printf("
    ");
            }
        }
        return 0;
    }
    

     这是网上一个人写的代码,比较简短:http://www.cnblogs.com/ACShiryu/archive/2011/08/09/poj3370.html  可供参考学习。

  • 相关阅读:
    Java运行时内存
    java --对象流与对象的序列化
    Java 文件操作
    爬虫
    eclipse项目放到github
    越来越玄的JAVA
    map和set的遍历
    集合总览
    unsafe类
    狡诈的java并发容器
  • 原文地址:https://www.cnblogs.com/yspworld/p/4663463.html
Copyright © 2011-2022 走看看