CSU 1954: 吃麵包 1956: 數字和 1957: Apache還想再活五百年 1958: 數字遊戲
阿新 • • 發佈:2019-01-05
#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;
}