題目:
明明有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 張牌沒有誰在前誰在後的順序之分,它...