# 【贪心】【TOJ4107】【A simple problem】

Given three integers n(1n1018)m(1m105)k(1k1018). you should find a list of integer A1,A2,,Am which satisfies three conditions:
1. A1+A2++Am=n.
2. 1Aik1 for each (1im).
3. GCD(A1,A2,,Am)=1.GCD means the greatest common divisor
4. if i<j then AiAj.
As the author is too lazy to write a special judge, if there's no answer ouput "I love ACM", And if there's more than one answer, output the one has the minimum A1, and if there still multiple answer make theA2 as small as possible, then A3,A4

m=1  直接 “I love ACM”

m=2

m=3

3 3 1

1 1 1

1 1 4

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
long long n,m,k;
long long gcd(long long a,long long b)
{
long long r;
while(b>0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
long long A[100000+5];
void do1()
{
if(n%2==1)
{
long long p=n/2+1;
if(p<=k-1) printf("%lld %lld\n",p,p-1);
else printf("I love ACM\n");
}
else
{
int ok=1;
long long a=n/2,b=n/2;
while(a+1<=k-1&&b-1>=1)
{
a++;
b--;
if(gcd(a,b)==1)
{
ok=0;
printf("%lld %lld\n",a,b);
break;
}
}
if(ok)
printf("I love ACM\n");
}
}
void do2()
{
memset(A,0,sizeof(A));
for(int i=1;i<=m;i++)
{
A[i]=n/m;
}
for(int i=1;i<=n%m;i++)
{
A[i]++;
}
if(n%m==0&&n!=m)
{
A[1]++;A[m]--;
}
if(A[1]<=k-1&&A[m]>=1)
{
for(int i=1;i<=m;i++)
{
printf("%lld",A[i]);
if(i!=m) printf(" ");
}
printf("\n");
}
else printf("I love ACM\n");
}
int main()
{
while(cin>>n>>m>>k)
{
if(m==1&&n!=1||k==1) printf("I love ACM\n");
else if(m==1&&n==1) printf("1\n");
else
{
if(m==2) do1();
else if(m>=3) do2();
}
}
}


• 本文已收录于以下专栏：

## 线段树模版—A Simple Problem with Integers

D - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:...
• llzhh
• 2016年04月29日 00:03
• 161

## A Simple Problem with Integers----线段树

C - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:...
• bless924295
• 2016年06月02日 18:55
• 424

## hdu4267--A Simple Problem with Integers（树状数组）

• u013015642
• 2015年08月26日 08:53
• 1263

## PAT(A) - 1078. Hashing (25)

The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl...
• flx413
• 2016年10月10日 22:04
• 162

## HDU 4267 A Simple Problem with Integers(树状数组)

A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 ...
• yeguxin
• 2015年08月26日 10:46
• 596

## POJ 3468 A Simple Problem with Integers Splay tree&Segment tree

• ACM_cxlove
• 2012年07月27日 14:38
• 3006

## 078. Hashing (25)

• u014646950
• 2015年08月17日 00:32
• 591

## HDU1757 A Simple Math Problem

#include #include using namespace std; int mod; typedef struct {     long long m[10][10]; }...
• AC_Gibson
• 2014年08月04日 15:08
• 317

## poj 3468 A Simple Problem with Integers(splay tree模板题)

A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Subm...
• zuihoudebingwen
• 2012年10月03日 15:13
• 2324

## A simple problem

Problem Description There is a simple problem. Given a number N. you are going to calculate N%1+N...
• u011123263
• 2014年06月12日 22:58
• 587

举报原因： 您举报文章：【贪心】【TOJ4107】【A simple problem】 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)