Bitmask Permissions
PHP
Hard
5 views
Problem Description
Start with mask=0. Commands: GRANT k, REVOKE k, CHECK k. k is 0..30. CHECK prints 1/0.
Input Format
First line q. Next q lines.
Output Format
Outputs for CHECK.
Sample Test Case
Input:
6
GRANT 1
GRANT 3
CHECK 1
REVOKE 1
CHECK 1
CHECK 3
Official Solution
<?php
$inputLines=preg_split('/\\R/', trim(stream_get_contents(STDIN)));
if(!$inputLines || trim($inputLines[0])==='') exit;
$q=intval($inputLines[0]);
$mask=0; $output=[];
for($i=1;$i<=$q;$i++){
$tokens=preg_split('/\\s+/', trim($inputLines[$i] ?? ''), 2);
$cmd=$tokens[0] ?? '';
$k=intval($tokens[1] ?? 0);
$bit=1<<$k;
if($cmd==='GRANT') $mask |= $bit;
elseif($cmd==='REVOKE') $mask &= (~$bit);
else $output[] = strval(($mask>>$k)&1);
}
echo implode(PHP_EOL,$output);
?>
Solutions (0)
No solutions submitted yet. Be the first!
No comments yet. Start the discussion!