Updated:

1. Setup (once)

/scoreboard objectives add points dummy "Points"
/scoreboard objectives setdisplay sidebar points
/scoreboard players set @a points 0

2. Target and command blocks

A target block gives off a redstone signal when hit. Run redstone dust from it to an impulse command block set to Needs Redstone, with two chain blocks behind it. Keep the command block within 3 to 4 blocks of the target.

3. Give the shooter a point

/execute as @e[type=arrow,distance=..5,limit=1,sort=nearest] on origin run scoreboard players add @s points 1
/execute as @e[type=arrow,distance=..5,limit=1,sort=nearest] on origin run tellraw @a [{"selector":"@s"},{"text":" hit the target!","color":"gold"}]
/kill @e[type=arrow,distance=..5]

on origin switches from the arrow to the player who shot it. Killing the arrow stops it from scoring twice.

4. Hand out bows and arrows

/clear @a arrow
/give @a bow
/give @a arrow 10
/scoreboard players set @a points 0

Skip Infinity so the arrow count matters. See strongest bow command.

5. Bullseye only

A target block gives a stronger signal the closer the hit is to its center, and dust loses one level per block. A longer dust line, around 8 blocks, means only hits near the center reach the command block. The command block is then farther away, so raise distance=..5 in step 3 to a bit more than the distance to the target, such as distance=..10.

6. Time limit

/scoreboard objectives add timer dummy
/scoreboard players set #game timer 1200

1200 ticks is 60 seconds. Set it when the round starts, then run these in a repeating block with a chain:

/scoreboard players remove #game timer 1
/execute if score #game timer matches 0 run title @a title {"text":"Time up!","color":"red"}
/execute if score #game timer matches 0 run clear @a arrow

The score keeps going below 0, so the end message shows only once.

Troubleshooting

Check your command

The Command Error Doctor checks common syntax mistakes in your browser.