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

    题目地址:http://poj.org/problem?id=3370

    一篇很好的博客:http://www.cppblog.com/pcfeng502/archive/2009/10/18/98902.aspx

    #include<stdio.h>
    #include<string.h>
    #define maxn 100005
    int a[maxn],b[maxn],num;
    void work(int c,int n)
    {
    	int sum = 0,t;
    	memset(b,0,sizeof(b));
    	for(int i = 1; i <= n; i++)
    	{
    		sum += a[i];
    		t = sum%c;
    		sum %= c;
    		if(t == 0)
    		{//当从第一个元素起到第i个元素的和可以被c整除,则1 -> i 即为所求的一个解
    			for(int j = 1; j <= i; j++)
    				printf("%d ",j);
    			return ;
    		}
    		else
    		{
    			if(b[t] > 0)
    			{// 当i > j 时sum[i]%c == sum[j]%c 则sum[i] = m*c +r ,sum[j] = n*c + r,sum[i] - sum[j] = m*c - n*c + r - r = (m-n)*c
    			//所以从j的下一个元素开始到到i元素的和可被c整除,则j+1 - i 即为所求解。 
    				for(int j = b[t]+1; j <= i; j++)
    					printf("%d ",j);
    					return; 
    			}
    		}
    		b[t] = i;
    	}
    }
    void init(int n)
    {//输入数据,
    	for(int i = 1; i <= n;i++)
    		scanf("%d",&a[i]);
    }
    int main()
    {
    	int c,n;
    	while(scanf("%d%d",&c,&n) != EOF && c+n)
    	{
    		init(n);
    		work(c,n);
    		printf("\n");
    	}
    	return 0;
    }
    


  • 相关阅读:
    洛谷P1182 数列分段`Section II`
    洛谷P3902 递增
    洛谷P1678-烦恼的高考志愿
    POJ 3263-Tallest Cow
    洛谷P2280 [HNOI2003]激光炸弹
    POJ 1958
    Vijos 1197
    VirtualBox 导入.vdi文件时报“uuid is exists”错误
    解压常用
    cut 命令
  • 原文地址:https://www.cnblogs.com/LUO257316/p/3220819.html
Copyright © 2011-2022 走看看