1. 程式人生 > >CSU 1954: 吃麵包 1956: 數字和 1957: Apache還想再活五百年 1958: 數字遊戲

CSU 1954: 吃麵包 1956: 數字和 1957: Apache還想再活五百年 1958: 數字遊戲

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<map>
#include<vector>
#include<sstream>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 1e5+10;
long long all,pay1,pay2,cost1,cost2;

int main()
{
    while(~scanf("%lld%lld%lld%lld%lld"
,&all,&pay1,&pay2,&cost1,&cost2)) { if(cost1>cost2) swap(cost1,cost2),swap(pay1,pay2); LL ans = -1; if((all/cost2)<maxn) { LL num = all/cost2; for(int i = 0 ;i<=num;i++) { LL pre = all - i*cost2; ans = max(i*pay2+(pre/cost1)*pay1,ans); } cout
<<ans<<endl; } else { LL ans2 = -1; for(int i = 0;i <= cost2;i++) { LL pre = all - i*cost1; ans2 = max(i*pay1+(pre/cost2)*pay2,ans2); }for(int i = 0;i <= cost1;i++) { LL pre = all - i*cost2; ans2 = max(i*pay2+(pre/cost1)*pay1,ans2); } cout
<<ans2<<endl; } } }
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<vector>
#include<iostream>
#include<cstdio>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 1e5+10;
int a[maxn];
int sum[maxn];
int p1,p2,p3;
int n;
int slove()
{
    p1 = 2;
    p2 = 4;
    p3 = 6;
    for(;p1<=n;p1++)
    {
        p2 = max(p2,p1+2);
        while(p2<=n&&sum[p1-1]>sum[p2-1]-sum[p1]) p2++;
        if(p2>=n||sum[p1-1]<sum[p2-1]-sum[p1])
            continue;
        p3 = max(p3,p2+2);
        while(p3<=n&&sum[p1-1]>sum[p3-1]-sum[p2]) p3++;
        if(p3>=n||sum[p3-1]-sum[p2]>sum[p1-1])
            continue;
        if(sum[n]-sum[p3]==sum[p1-1])
        {
            cout<<p1<<' '<<p2<<' '<<p3<<endl;
            return 41;
        }
    }
    return 0;
}
int main()
{
    while(~scanf("%d",&n))
    {
        for(int i = 1 ;i<=n;i++)
        {
            scanf("%d",&a[i]);
            sum[i] = sum[i-1] + a[i];
        }
        if(!slove())
        {
            puts("-1");
        }
    }
}
#include<iostream>
#include<string>
#include<map>
#include<set>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<vector>
#include<cstring>
#include<iomanip>
#include<sstream>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=1e5;
int y,y2,m,m2,d,d2;
int month[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
                  {0,31,29,31,30,31,30,31,31,30,31,30,31}};

int op(int y)
{
    return (y%100!=0&&y%4==0)||(y%400==0);
}

int cal(int y,int m,int d)
{
    int sum=0;
    sum+=y*365;
    for(int i=0;i<y;i++)
    {
        if(op(i)) sum+=1;
    }
    if(op(y))
    {
        for(int i=1;i<m;i++) sum+=month[1][i];
    }else
    {
        for(int i=1;i<m;i++) sum+=month[0][i];
    }

    sum+=d;
    return sum;
}

int main()
{
    string s;
    int t;
    char ch;
    while(cin>>y)
    {
        cin>>ch;cin>>m;cin>>ch;cin>>d;
        cin>>y2;cin>>ch;cin>>m2;cin>>ch;cin>>d2;
        //cout<<y<<m<<d<<endl;
        //cout<<y2<<m2<<d2<<endl;
        cout<<abs(cal(y,m,d)-cal(y2,m2,d2))<<endl;
    }
    return 0;
}
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

//返回輸入值的位數大小
int f(int x)
{
    int num=0,i=1;
    while(x/i)
        {
            num++;
            i*=10;
        }
    return num;
}

int main()
{
    int t,x,y;
    cin>>t;
    while(t--)
    {
        cin>>x>>y;
        if(f(x)<f(y)) cout<<"-1"<<endl;    //若x的位數比y的小,直接輸出“-1”
        else
            {
                int ans=0,i=f(y),x1,y1;
                for(int j=1; j<i; j++)        //從y最低位開始到次高位停止,記錄變換次數
                {
                    x1=x%10;
                    y1=y%10;
                    ans+=abs(y1-x1)<(10-abs(y1-x1))?abs(y1-x1):(10-abs(y1-x1));
                    x/=10;
                    y/=10;
                }
                if(x/10)              //若x位數大於y,則y最高位變換不需考慮前導零的限制條件
                {
                    do                 //直接x將多出來的高位變為零並記錄次數
                    {
                        x1=x%10;
                        y1=y%10;
                        ans+=abs(y1-x1)<(10-abs(y1-x1))?abs(y1-x1):(10-abs(y1-x1));
                        x/=10;
                        y/=10;
                    }
                    while(x);
                }
                else                //若x位數等於y,則y最高位變換次數即最高位之差的絕對值
                {
                    x1=x%10;
                    y1=y%10;
                    ans=ans+abs(y1-x1);
                }
                cout<<ans<<endl;
            }
    }
    return 0;
}