2424. Back and Forth

2424. Back and Forth題目描述

題目描述

Farmer John有兩個擠奶棚,每個擠奶棚裏各有一個奶罐和一個裝有10個各種尺寸的桶的儲物櫃。他喜歡將在兩個擠奶棚之間來回運送牛奶作爲一種鍛鍊方式。
週一,Farmer John量了恰好1000加侖的牛奶放在第一個擠奶棚的奶罐裏,又量了恰好1000加侖的牛奶放在第二個擠奶棚的奶罐裏。
週二,他從第一個擠奶棚裏取出一個桶,並裝滿牛奶,然後將牛奶運到第二個擠奶棚,並將牛奶倒進奶罐。他把這個桶留在了第二個擠奶棚。
週三,他從第二個擠奶棚裏取出一個桶(可能是週二留在這裏的),並裝滿牛奶,然後將牛奶運到第一個擠奶棚,並將牛奶倒進奶罐。他把這個桶留在了第一個擠奶棚。
週四,他從第一個擠奶棚裏取出一個桶(可能是週三留在這裏的),並裝滿牛奶,然後將牛奶運到第二個擠奶棚,並將牛奶倒進奶罐。他把這個桶留在了第二個擠奶棚。
週五,他從第二個擠奶棚裏取出一個桶(可能是週二或週四留在這裏的),並裝滿牛奶,然後將牛奶運到第一個擠奶棚,並將牛奶倒進奶罐。他把這個桶留在了第一個擠奶棚。
此時Farmer John測量了第一個擠奶棚的奶罐裏的牛奶。他總共可能得到多少種不同的讀數?

輸入

輸入的第一行包含10個整數,爲第一個擠奶棚裏初始的桶的容積。輸入的第二行也包含10個整數,爲第二個擠奶棚裏初始的桶的容積。所有桶的容積均在1…100的範圍內。

輸出

輸出Farmer John在週五之後測量第一個擠奶棚裏的奶罐的牛奶時可能得到的讀數的數量。

樣例輸入

1 1 1 1 1 1 1 1 1 2
5 5 5 5 5 5 5 5 5 5

樣例輸出

5

數據範圍限制

提示
在這個例子中,最後第一個擠奶棚的奶罐中的牛奶量總共有5種可能的結果:
1000:FJ可以在每次往返的時候都攜帶同一個桶,從而不會改變第一個擠奶棚的奶罐的牛奶量。
1003:FJ可以在週二運送2個單位,週三5個單位,週四1個單位,週五1個單位。
1004:FJ可以在週二運送1個單位,週三5個單位,週四1個單位,週五1個單位。
1007:FJ可以在週二運送1個單位,週三5個單位,週四2個單位,週五5個單位。
1008:FJ可以在週二運送1個單位,週三5個單位,週四1個單位,週五5個單位。

思路:
題目大意可簡化爲:有一個變量X,初值爲1000.我們可以將兩個擠奶棚中的桶分別看成是a,b數組中的元素,進行了四次操作(- + - +,具體看題意)。最後問操作後X有多少種不同的值。
這道題的難點就是怎樣去枚舉所有的操作。
仔細想想,雖然有超級多種,但基於只有區區二十種元素,且各元素都不大(1~100)。所以我們可以考慮用暴力。
衆多操作其實只有三種:

  1. 全白乾 (每次往返的時候都攜帶同一個桶)
  2. 兩次白乾 (原理同上,只幹了兩天的活)
  3. 給兩個,還兩個(桶號都不同)

前兩種都很好理解,第三種要用到排列組合(乘法原理)

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e2;
int a[N],b[N],ans;
bool vis[2000];
void input()
{
	for(int i=1;i<=10;i++) scanf("%d",&a[i]);
	for(int i=1;i<=10;i++) scanf("%d",&b[i]);
}
void work()
{
	vis[1000]=1; //白乾
	for(int i=1;i<=10;i++) //有兩天白乾 
	for(int j=1;j<=10;j++) 
		vis[1000-a[i]+b[j]]=1;
		
	for(int i=1;i<=9;i++)	//給兩個,還兩個(桶號都不同) 
	for(int j=1;j<=9;j++)
	for(int x=i+1;x<=10;x++)
	for(int y=j+1;y<=10;y++)
		vis[1000-a[i]+b[j]-a[x]+b[y]]=1;
		
	for(int i=800;i<=1198;i++) 
	if(vis[i]) ans++;
}
int main()
{
	//fre(backforth);
	input();
	work();
	printf("%d",ans);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章