題意:
給你數字 a,b
,c
,a,b,c,
a,b,c,
要你找出隨意的乙個 x,y
,z
x,y,z
x,y,
z 使得 a∗1
0x+b
∗10y
=c∗1
0z
a*10^+b*10^=c*10^
a∗10x+
b∗10
y=c∗
10z 成立。
做法:
我們考慮c這個數的最高位的**,c這個數的最高位有兩種可能的**。第一種是a或者b的最高位直接相加(包括a或b的這一位是0的情況)而來,另外一種是a和b的最高位進行相加通過進製而來。
所以我們可以列舉 a
aa 和 b
bb 兩個數字的最高位在c的最高位和次高位是否能滿足條件即可。這裡還用到了乙個優化(如果c的第一位不是1的話,就排除了a和b相加進製的情況)。
賽上的時候因為用了stl的string的各種操作,瘋狂t怎麼樣都t、t到絕望。賽後用了char寫寫就243ms,我哭了…果然我還是太菜了… 附上一堆測試資料供博友自行檢查。
#include
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define ll long long
using
namespace std;
const
int maxn=
100009
;int flag,ctc,len[4]
,x,y,z;
char s[3]
[maxn]
;char a[maxn]
,c[maxn]
;int
deal
(int idc,
int ida,
int st)
if(la>lc)
return0;
if(la==lc)
}int bit=0;
rep(i,
1,la)
else bit=0;
a[i]
=c[i]
-a[i]
+'0';}
int i=0;
for(i=la;i>=
1&&a[i]
=='0'
;i--);
if(i>=1)
return add;
}return0;
}intck(
int idb)
break;}
return post==
0&&posb==0;
}int
main()
len[2]
+=ctc;
z=ctc; flag=0;
int l1,l2;
if(s[2]
[1]==
'1'&&
(l1=
deal(2
,0,2
)))}
if(l1=
deal(2
,0,1
))}if
(s[2][
1]=='1'
&&(l1=
deal(2
,1,2
)))}
if(l1=
deal(2
,1,1
))}if
(flag)
printf
("%d %d %d\n"
,x,y,z)
;else
printf
("-1\n");
}return0;
}/*4023 39 62
40500 643 1048
23 39 62
2 31 51
1 1 1
20 49 5010000
20 49 5100000
2000000 490000000000000000000 51
200 490000000 51
2000000 49000 51
40500 643 1048
6003000000 101003 61040030000
19954009 800760010 10003001
5 6 11
1000000000000000000000 2 3
11111111 11 11111121000
9913293911030092 325365190001 9945830430030192000
99132939110300920000000000 3253651900010000000000 9945830430030192000
3 5 53
102 9080 1010000
*/
hdu2035 人見人愛A B(C語言)
problem description 求a b的最後三位數表示的整數。說明 a b的含義是 a的b次方 input 輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數a和b組成 1 a,b 10000 如果a 0,b 0,則表示輸入資料的結束,不做處理。output 對於每個測試例項,請輸出a...
hdu 大菲波數
大菲波數 problem description fibonacci數列,定義如下 f 1 f 2 1 f n f n 1 f n 2 n 3。計算第n項fibonacci數值。input 輸入第一行為乙個整數n,接下來n行為整數pi 1 pi 1000 output 輸出為n行,每行為對應的f p...
hdu 勝利大逃亡
problem description ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會.魔王住在乙個城堡裡,城堡是乙個a b c的立方體,可以被表示成a個b c的矩陣,剛開始ignatius被關在 0,0,0 的位置,離開城堡的門在 a 1,b 1,c 1 的位...