C. XOR and OR
http://codeforces.com/problemset/problem/282/C
time limit per test
memory limit per test
input
output
The Bitlandians are quite weird people. They do everything differently. They have a different alphabet so they have a different definition for a string.
0" and "1".
a, and applies several (possibly zero) operations to it. In one operation the mayor may take any two adjacent characters of a string, define one of them as x and the other one as y. Then he calculates two values p and q: p = x xor y, q = x or y. Then he replaces one of the two taken characters by p and the other one by q.
xor operation means the bitwise excluding OR operation. The or
11 to string 10 or to string 01. String 1
a and b. Your task is to check if it is possible for BitHaval to transform string a to string b
Input
a, the second line contains Bitlandish string b. The strings can have different lengths.
106.
Output
YES" if a can be transformed into b, otherwise print "NO". Please do not print the quotes.
Sample test(s)
input
11 10
output
YES
input
1 01
output
NO
input
000 101
output
NO
有如下变换:
1. 11<-->10
2. 11<-->01
3. 00-->00
由1和2知
4. 01<-->10
所以,只要两边长度相等,且两边都为0或者两边都有1,就输出"YES",其他为"NO"。
完整代码:
/*62ms,1900KB*/
#include<cstdio>
#include<cstring>
const int maxn = 1000001;
char a[maxn], b[maxn];
int main(void)
{
bool chk1 = false, chk2 = false;
gets(a);
gets(b);
int len1 = strlen(a), len2 = strlen(b), i;
if (len1 != len2)
printf("NO");
else
{
for (i = 0 ; i < len1 && a[i] == '0' ; i++)
;
if (i < len1)
chk1 = true;
for (i = 0 ; i < len1 && b[i] == '0' ; i++)
;
if (i < len1)
chk2 = true;
printf(!chk1 && chk2 || chk1 && !chk2 ? "NO" : "YES");
}
return 0;
}
Haskell:
import qualified Data.ByteString.Char8 as B
main :: IO ()
main = putStrLn . solve . B.lines =<< B.getContents
solve :: [B.ByteString] -> String
solve (a : b : _)
| B.length a == B.length b && B.elem '1' a == B.elem '1' b = "YES"
| otherwise = "NO"