Powered by:AB_IN 局外人
A 牛牛爱字符串
用的
做的,可能因为
去前置0比较方便。。。
代码挺好懂的。
while True:
try:
s=input()
s1=''
for i in s:
if i.isdigit()==True:
s1+=i
elif s1!='':
print(int(s1),end=" ")
s1=''
if s1!='':
print(int(s1),end="")
print()
except:
break
找符合的序列怎么少的了我正则表达式??
import re
while True:
try:
s=input()
reg='\\d+'
res=re.findall(reg, s)
print(' '.join(map(str,list(map(int,res)))))
except:
break
B 牛牛爱位运算
-
运算规则就是两个数的二进制位上,对应都是1,才会是1。
那么 最好的情况就是不减少( ),题目中没有要求一定要进行与运算,所以取最大的即可 - 或者, 。所以
t=int(input())
while t>0:
t-=1
lst=list(map(int ,input().split()))
lst.pop(0)
print(max(lst))
C 牛牛爱博弈
打个表就可以看出来。
for _ in range(int(input())):
n=int(input())
n%=3
if n==0:
print("Frame")
else:
print("Alan")
D 牛妹爱数列
一路
过去就行了。
,表示在
这个位置之前的数全为
。
- 当
-
- 相当于 (设 )
- 相当于 ,这时候直接加上 就行了,值不变。
- 相当于 , 加上 变成 ,则需要单点修改。
-
- 相当于 (设 )
- 相当于 ,加上 变成 ,要都变成 ,需要一次前缀修改。
- 相当于 , 加上 变成 ,要都变成 ,则需要单点修改。
-
- 当
- 同理
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int N=1e5+10;
int n,dp[N][3],a[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]){
dp[i][1]=min(dp[i-1][1],dp[i-1][0]+1);
dp[i][0]=min(dp[i-1][1]+1,dp[i-1][0]+1);
}
else{
dp[i][0]=min(dp[i-1][0],dp[i-1][1]+1);
dp[i][1]=min(dp[i-1][0]+1,dp[i-1][1]+1);
}
}
cout<<dp[n][0]<<endl;
}
完结。