| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:大侠们, 帮我看看, 不会处理 k == 64, 所以用了高精, 在zoj 过了, 在poj 挂了, %I64d 的也考虑了In Reply To:大侠们, 帮我看看, 不会处理 k == 64, 所以用了高精, 在zoj 过了, 在poj 挂了, %I64d 的也考虑了 Posted by:semonteer at 2005-11-12 14:44:50 > #include<stdio.h>
>
> int t,k;
> long long n;
> char bit[100];
> char N[100];
> char Max[100];
> char Diff[100];
> char Mdiff[100];
>
> bool cmp(char *a, char *b, int k)
> {
> if(a[k] == 0 && b[k] == 1)
> return true;
> if(a[k] == 1 && b[k] == 0)
> return false;
> bool flag = false;
> for(int i = k-1; i >= 0; i--)
> {
> if(a[i] == b[i])
> continue;
> if(a[i] > b[i])
> flag = true;
> else // a[i] < b[i]
> flag = false;
> return flag && a[k] == 0 && b[k] == 0
> || !flag && a[k] == 1 && b[k] == 1;
> }
> return false;
> }
>
> void sub(char *a, char *b, char *c, int k)
> {
> int C;
> if(b[k] == 1)
> {
> C = 0;
> for(int i = 0; i < k; i++)
> {
> c[i] = a[i] + b[i] + C;
> if(c[i] > 1)
> c[i] -= 2, C = 1;
> else
> C = 0;
> }
> c[k] = 0;
> }
> else // b[k] == 0
> {
> C = 0;
> for(int i = 0; i < k; i++)
> {
> c[i] = 2 + a[i] - b[i] - C;
> if(c[i] < 2)
> C = 1;
> else
> C = 0, c[i] -= 2;
> }
> c[k] = 0;
> }
> }
>
> int main()
> {
> scanf("%d",&t);
> while(t--)
> {
> scanf("%d",&k);
> scanf("%s",bit);
> scanf("%I64d",&n);
>
> if(n < 0)
> N[k+1] = 1, n = -n;
> else
> N[k+1] = 0;
>
> for(int i = 0; i < k; i++)
> {
> N[i] = (n&1);
> n = (n>>1);
> }
>
> Max[k] = Mdiff[k] = Max[k+1] = Mdiff[k+1] = 0;
> for(int i = 0; i < k; i++)
> {
> if(bit[i] == 'p')
> Max[k-1-i] = 1;
> else
> Max[k-1-i] = 0;
> Mdiff[i] = 1;
> }
>
> sub(Max, N, Diff, k+1);
>
> if(cmp(N,Max,k+1))
> printf("Impossible\n");
> else
> {
> if(cmp(Diff,Mdiff,k+1))
> {
> printf("Impossible\n");
> }
> else
> {
> for(int i = k-1; i >= 0; i--)
> {
> if(Diff[k-1-i] == 1)
> {
> if(bit[i] == 'p')
> bit[i] = '0';
> else
> bit[i] = '1';
> }
> else
> {
> if(bit[i] == 'p')
> bit[i] = '1';
> else
> bit[i] = '0';
> }
> }
> printf("%s\n",bit);
> }
> }
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator