NC21505. 铁路车厢内的学生
描述
输入描述
第一行包含三个整数n,a和b——火车车厢的座位总数、学生程序员人数和学生运动员人数。
第二行包含长度为n的字符串,由字符“.”和“*”组成。点表示相应的位置是空的。星号意味着相应的位置被陪审员占据。
输出描述
输出一个整数
示例1
输入:
5 1 1 *...*
输出:
2
说明:
*.AB*示例2
输入:
6 2 3 *...*.
输出:
4
说明:
*BAB*B示例3
输入:
11 3 10 .*....**.*.
输出:
7
说明:
B*ABAB**A*B示例4
输入:
3 2 3 ***
输出:
0
说明:
无法安排Python3(3.9) 解法, 执行用时: 32ms, 内存消耗: 3716K, 提交时间: 2020-12-03 21:34:31
import re n,a,b = map(int,input().split()) students = a+b s = input() s = s + '*' cnt = 0 for i in range(len(s)): if s[i] == '*' : while cnt > 1: cnt -= 2 if a > 0 and b > 0: a -= 1 b -= 1 elif a > 0 : a -= 1 elif b > 0: b -= 1 if cnt != 0 and (a > 0 or b > 0): if a > b: a -= 1 else: b -= 1 cnt = 0 else: cnt += 1 print(students-(a+b))
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 376K, 提交时间: 2020-10-14 15:41:13
#include <bits/stdc++.h> using namespace std; int main() { int n,a,b; string in; cin>>n>>a>>b; cin>>in; int len=in.length(); int po=0; int ans=0; // 等于len,解决最后一位为.情况 for(int i=0;i<=len;++i) { if(in[i]=='.') { po++; } else { if(po) { if(a<b) swap(a,b); a=a-po/2-(po%2==1); b=b-po/2; ans+=po; } po=0; } } cout<<ans+(a<0?a:0)+(b<0?b:0)<<endl; return 0; }
C++(g++ 7.5.0)(g++7.5.0) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2023-07-30 17:40:06
#include<iostream> #include<stdio.h> #include<algorithm> #define ll long long int using namespace std; int main() { int n,a,b; string s; cin>>n>>a>>b; cin>>s; int ans=0; int maxn=max(a,b),minx=min(a,b); for(int i=0;i<n;i++){ if(s[i]=='.'&&maxn) {s[i]='*';i++;maxn--;ans++;} } for(int i=0;i<n;i++) if(s[i]=='.'&&minx) {ans++;minx--;} cout<<ans<<endl; return 0; }
C++ 解法, 执行用时: 6ms, 内存消耗: 464K, 提交时间: 2021-10-15 13:02:42
#include<iostream> #include<stdio.h> #include<algorithm> #define ll long long int using namespace std; int main() { int n,a,b; string s; cin>>n>>a>>b; cin>>s; int ans=0; int maxn=max(a,b),minx=min(a,b); for(int i=0;i<n;i++){ if(s[i]=='.'&&maxn) {s[i]='*';i++;maxn--;ans++;} } for(int i=0;i<n;i++) if(s[i]=='.'&&minx) {ans++;minx--;} cout<<ans<<endl; return 0; }