1037
题解
第一次跟柳神的代码思路接近,然鹅,人家写的也太简洁了吧orz 另外,刚开始交的时候错了几个测试点。原因是没有考虑到某一位的数字相等时,也要做减法。 我的这个思考纰漏正好是从柳神的反面来做的,柳神用的是<,我用的是>=。 真是简洁到各个细节Orz
#include <iostream>
using namespace std;
struct monkey{
long long int Galleon;
int Sickle;
int Knut;
}a,b,c;
int main()
{
bool flag=false;
scanf("%lld.%d.%d %lld.%d.%d",&b.Galleon,&b.Sickle,&b.Knut,&a.Galleon,&a.Sickle,&a.Knut);
if(a.Galleon<b.Galleon||(a.Galleon==b.Galleon&&a.Sickle<b.Sickle)||(a.Galleon==b.Galleon&&a.Sickle==b.Sickle&&a.Knut<b.Knut))
{
flag=true;
monkey tmp;
tmp.Galleon=a.Galleon;tmp.Sickle=a.Sickle;tmp.Knut=a.Knut;
a.Galleon=b.Galleon;a.Sickle=b.Sickle;a.Knut=b.Knut;
b.Galleon=tmp.Galleon;b.Sickle=tmp.Sickle;b.Knut=tmp.Knut;
}
if(a.Knut>=b.Knut)
{
c.Knut=a.Knut-b.Knut;
if(a.Sickle>=b.Sickle)
c.Sickle=a.Sickle-b.Sickle;
else
{
a.Sickle+=17;
a.Galleon-=1;
c.Sickle=a.Sickle-b.Sickle;
}
if(a.Galleon>=b.Galleon)
c.Galleon=a.Galleon-b.Galleon;
}else
{
a.Knut+=29;
a.Sickle-=1;
c.Knut=a.Knut-b.Knut;
if(a.Sickle>=b.Sickle)
c.Sickle=a.Sickle-b.Sickle;
else
{
a.Sickle+=17;
a.Galleon-=1;
c.Sickle=a.Sickle-b.Sickle;
}
if(a.Galleon>=b.Galleon)
c.Galleon=a.Galleon-b.Galleon;
}
if(!flag)
printf("%lld.%d.%d\n",c.Galleon,c.Sickle,c.Knut);
else
printf("-%lld.%d.%d\n",c.Galleon,c.Sickle,c.Knut);
return 0;
}
柳神代码
#include <iostream>
using namespace std;
int main() {
int a, b ,c, m, n, t, x, y, z;
scanf("%d.%d.%d %d.%d.%d",&a, &b, &c, &m, &n, &t);
if (a > m || (a == m && b > n) || (a == m && b == n && c > t)) {
swap(a, m); swap(b, n); swap(c, t);
printf("-");
}
z = t < c ? t - c + 29 : t - c;
n = t < c ? n - 1 : n;
y = n < b ? n - b + 17 : n - b;
x = n < b ? m - a - 1 : m - a;
printf("%d.%d.%d", x, y, z);
return 0;
}
思维量小的一种做法
将各位统一化为某一位后再进行相减,之后再格式化为 Galleon.Sickle.Knut的形式。比如按它们三者的关系将Galleon和Sickle都转化为Knut,注意此时如果数据过大要将knut定义为long long型,本题没超。
#include<iostream>
using namespace std;
int main(){
int a,b,c,d,e,f;
scanf("%d.%d.%d %d.%d.%d",&a,&b,&c,&d,&e,&f);
int count=d*17*29+e*29+f-a*17*29-b*29-c;
if(count<0){
cout<<"-";
count=-count;
}
cout<<count/29/17<<"."<<count/29%17<<"."<<count%29;
return 0;
}
|