模擬賽 紅藍牌

2021-07-30 05:57:09 字數 2012 閱讀 6072

題目:

明明有n張牌,正面按編號寫有數字1到n(每個數字只出現一次)。每張牌的反面根據正面的數字塗上兩種顏色。如果正面的數字是質數,則為紅色,反之為藍色。 

明明的老師從這n張牌裡選出了一些,按數字從小到大排序後全部反面向上放成一行。他要明明判斷這些牌上的數字。

輸入格式

第一行:乙個正整數n, 1 <= n <= 1000.  

第二行:乙個字串,長度 k 在 1 到 50 之間。字串中只有'r'和'b','r'表示紅色,'b'表示藍色。

輸出格式:

一行,有k個整數,每個整數代表相應位置上的牌的正面數字。如果某張牌不能確定上面的數字,否則輸出-1.

輸入樣例:

樣例15

rrr樣例2

7bbb

樣例36

rbr輸出樣例:

樣例12  3  5

樣例21  4  6

樣例3-1  4  5

解題思路:

正的反的做一遍,若某一張牌的兩個值不同,則為-1.

**:var

n,m,num,i,j,k,t,z,ii,jj:longint;

a,b,s:array[0..2000]of longint;

st:ansistring;

c:char;

f:array[0..2000]of boolean;

procedure csh(x:longint);

vari,j:longint;

begin

for i:=2 to n do

if f[i]=true then

begin

for j:=2 to n div i do

f[i*j]:=false;

end;

end;

begin

fillchar(f,sizeof(f),true);

f[1]:=false;

readln(n);

csh(n);

readln(st);

j:=0;

for i:=1 to length(st) do

begin

inc(j);

if st[i]='r' then

begin

if f[j]=true then

a[i]:=j

else begin

while f[j]=false do

inc(j);

a[i]:=j;

end;

end;

if st[i]='b' then

begin

if f[j]=false then

a[i]:=j

else begin

while f[j]=true do

inc(j);

a[i]:=j;

end;

end;

end;

j:=n+1;

for i:=length(st) downto 1 do

begin

dec(j);

if st[i]='r' then

begin

if f[j]=true then

b[i]:=j

else begin

while f[j]=false do

dec(j);

b[i]:=j;

end;

end;

if st[i]='b' then

begin

if f[j]=false then

b[i]:=j

else begin

while f[j]=true do

dec(j);

b[i]:=j;

end;

end;

end;

for i:=1 to length(st) do

if a[i]<>b[i] then write('-1 ')

else write(a[i],' ');

end.

DP 概率 紅藍球

有 n 個紅球和 m 個藍球,a,b,c 三個人,輪流取球。若 a 取到紅球則 a 勝利,若 b 取到紅球則 b 勝利,c只負責取球搗亂,不參與勝負。若最後全部球取完後 a 沒有拿到紅球,則 b 勝利,求 a 勝利的概率。輸入 m,n 輸出 a 勝利的概率,保留 5 位小數 補零 樣例輸入 3 4 ...

紅和藍 題解 思維

其實比賽想到了一部分但是自己不知道怎麼去實現 直接copy隊友的 可以發現,樹的葉子節點肯定是與它的父親節點相匹配的,所以我們深搜一遍,從底層往上去模擬匹配的過程,對於以i為根節點的子樹,我們先將它的子子樹匹配好,如果 與 i 相鄰的兒子節點都有匹配關係,那麼說明 i 節點肯定要跟它的父親節點匹配,...

撲克牌模擬

題意 東東有 a b 張撲克牌。每張撲克牌有乙個大小 整數,記為a,範圍區間是 0 到 a 1 和乙個花色 整數,記為b,範圍區間是 0 到 b 1 撲克牌是互異的,也就是獨一無二的,也就是說沒有兩張牌大小和花色都相同。一手牌 的意思是你手裡有5張不同的牌,這 5 張牌沒有誰在前誰在後的順序之分,它...