zoukankan      html  css  js  c++  java
  • hdu1808-Halloween treats(抽屉原理)

    题目大意:

    给你两个整数C和N,再给你N个正数的序列,从中找到若干数,使得其和刚好是 C

    的倍数。输出这些数的序号。


     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 
     5 int c,n,sum,t,j;
     6 int a[100005],f[100005];
     7 
     8 
     9 int main()
    10 {
    11     while(scanf("%d%d",&c,&n)&&(c!=0||n!=0))
    12     {
    13         sum=0;
    14         memset(f,-1,sizeof(f));
    15         for(int i=1;i<=n;i++)
    16         {
    17             scanf("%d",&a[i]);
    18         }
    19         for(int i=1;i<=n;i++)
    20         {
    21             sum+=a[i];
    22             t=sum%c;
    23             sum=sum%c;//减小运算
    24 
    25             if(t==0)
    26             {
    27                 for(j=1;j<i;j++)
    28                 {
    29                     printf("%d ",j);
    30                 }
    31                 printf("%d
    ",j);
    32                 break;
    33             }
    34              else if(f[t]!=-1)//当余数上一次循环存在时
    35             {
    36                 for(j=f[t]+1;j<i;j++)
    37                     printf("%d ",j);
    38                 printf("%d
    ",j);
    39                 break;
    40             }
    41             f[t]=i;//sum%c的位置i
    42 
    43         }
    44     }
    45 }

    证明

  • 相关阅读:
    交互题
    线段树
    最小生成树
    拓扑排序
    欧拉回路
    RMQ问题
    dfs序与求子树子节点(染了色)的个数
    dp题
    树状数组与离散化
    没做完的题
  • 原文地址:https://www.cnblogs.com/Fy1999/p/8833668.html
Copyright © 2011-2022 走看看