close
內容
Taso 有一塊條狀的田地。他計劃在下一季種植不同的作物。但是這個地區有很多烏鴉,Taso 怕他們會吃掉這些作物。因此他決定在田地的不同位置放置稻草人。
田地可以用 1 x N 的格子模擬。有些部分是不毛之地無法種植作物。一個稻草人除了所在的格子外也保護其左側及右側緊鄰的格子。
已知田地的描述,要保護所有可用田地最少需要幾個稻草人?
輸入說明
輸入開始有一整數 T (≤ 100),表示測資筆數。
每筆測資第一行有一整數 N (0 < N < 100)。下一行有 N 個字元以描述田地。點 (.) 表示良田,井號 (#) 表示不毛之地。
輸出說明
對於每筆測資,先輸出測資編號,再輸出需放置的稻草人數量。
範例輸入 #1
3 3 .#. 11 ...##....## 2 ##
範例輸出 #1
Case 1: 1 Case 2: 3 Case 3: 0
C++
#include<iostream> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int t; int n; string s; int ans; cin>>t; //輸入次數 for(int i=1;i<t+1;i++){ cin>>n; getline(cin,s); int arr[n]={0}; //測資二 "00000000000" /*測試用 for(int k=0;k<n;k++){ cout<<arr[k]<<" "; }*/ getline(cin,s); ans=0; for(int j=0;j<n;j++){ //測資二 "...##....##" ->"11100111100" if(s[j]=='.')arr[j]=1; else arr[j]=0; } /*測試用 for(int l=0;l<n;l++){ cout<<arr[l]<<" "; }*/ for(int j=0;j<n;j++){ // 測資二 "1(檢查到)(變0) 1(變0) 1(變0) 0 0 1 1 1 1 0 0" if(arr[j]==1){ ans++; arr[j]=0; arr[j+1]=0; arr[j+2]=0; } } cout<<"Case "<<i<<": "<<ans<<"\n"; } return 0; }
python:
t=int(input()) for i in range(t): n=int(input()) arr=list(input()[::1]) ans=0 for j in range(len(arr)): if arr[j]==".":arr[j]=1 else:arr[j]=0 #多加兩塊荒地,用於溢出 arr.append(0) arr.append(0) for j in range(len(arr)): if(arr[j]==1): ans+=1 arr[j]=0 arr[j+1]=0 arr[j+2]=0 print(f'Case {i+1}: {ans}')
文章標籤
全站熱搜