(纪中)2424. Back and Forth

(File IO): input:backforth.in output:backforth.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet


题目描述
F a r m e r J o h n Farmer John FarmerJohn有两个挤奶棚,每个挤奶棚里各有一个奶罐和一个装有 10 10 10个各种尺寸的桶的储物柜。他喜欢将在两个挤奶棚之间来回运送牛奶作为一种锻炼方式。
周一, F a r m e r J o h n Farmer John FarmerJohn量了恰好 1000 1000 1000加仑的牛奶放在第一个挤奶棚的奶罐里,又量了恰好 1000 1000 1000加仑的牛奶放在第二个挤奶棚的奶罐里。
周二,他从第一个挤奶棚里取出一个桶,并装满牛奶,然后将牛奶运到第二个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第二个挤奶棚。
周三,他从第二个挤奶棚里取出一个桶(可能是周二留在这里的),并装满牛奶,然后将牛奶运到第一个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第一个挤奶棚。
周四,他从第一个挤奶棚里取出一个桶(可能是周三留在这里的),并装满牛奶,然后将牛奶运到第二个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第二个挤奶棚。
周五,他从第二个挤奶棚里取出一个桶(可能是周二或周四留在这里的),并装满牛奶,然后将牛奶运到第一个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第一个挤奶棚。
此时 F a r m e r J o h n Farmer John FarmerJohn测量了第一个挤奶棚的奶罐里的牛奶。他总共可能得到多少种不同的读数?


输入
输入的第一行包含 10 10 10个整数,为第一个挤奶棚里初始的桶的容积。输入的第二行也包含 10 10 10个整数,为第二个挤奶棚里初始的桶的容积。所有桶的容积均在 1 … 100 1…100 1100的范围内。

输出
输出 F a r m e r J o h n Farmer John FarmerJohn在周五之后测量第一个挤奶棚里的奶罐的牛奶时可能得到的读数的数量。


样例输入
1 1 1 1 1 1 1 1 1 2
5 5 5 5 5 5 5 5 5 5

样例输出
5


数据范围限制


提示
在这个例子中,最后第一个挤奶棚的奶罐中的牛奶量总共有5种可能的结果:
1000 1000 1000 F J FJ FJ可以在每次往返的时候都携带同一个桶,从而不会改变第一个挤奶棚的奶罐的牛奶量。
1003 1003 1003 F J FJ FJ可以在周二运送 2 2 2个单位,周三 5 5 5个单位,周四 1 1 1个单位,周五 1 1 1个单位。
1004 1004 1004 F J FJ FJ可以在周二运送 1 1 1个单位,周三 5 5 5个单位,周四 1 1 1个单位,周五 1 1 1个单位。
1007 1007 1007 F J FJ FJ可以在周二运送 1 1 1个单位,周三 5 5 5个单位,周四 2 2 2个单位,周五 5 5 5个单位。
1008 1008 1008 F J FJ FJ可以在周二运送 1 1 1个单位,周三 5 5 5个单位,周四1个单位,周五 5 5 5个单位。


解题思路
暴力就好


代码

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int a[25],b[25],ans=1000,bsy;
bool m[10000];
int main(){
	freopen("backforth.in","r",stdin);
	freopen("backforth.out","w",stdout);
    for (int i=1;i<=10;i++)scanf("%d",&a[i]);       
    for (int i=1;i<=10;i++)scanf("%d",&b[i]);       
    for (int i=1;i<=10;i++)  
    {
        b[11]=a[i];
        ans-=a[i];
        for (int j=1;j<=11;j++)
        {
            a[11]=b[j];
            ans+=b[j];
            for(int k=1;k<=11;k++)
            {
                if(k==i)       
                    continue;
                b[12]=a[k];
                ans-=a[k];
                for (int p=1;p<=12;p++) 
                {
                    if (p==j)    
                        continue;
                    ans+=b[p];
                    if (!m[ans])
                        m[ans]=1,bsy++;
                    ans-=b[p];
                }
                ans+=a[k];
            }
            ans-=b[j];
        }
        ans+=a[i];
    }
    printf("%d",bsy);
}

你可能感兴趣的:(纪中)