牛客算法周周练20水题

Powered by:AB_IN 局外人

A 兔子的名字

详解进

import re
lst=[];tmp=[]
n,m=map(int,input().split())
for _ in range(n):
    lst.append(input())
for _ in range(m):
    s=input()
    reg=''
    for i in s:
        reg+=i
        reg+='.*?'
    tmp.append(reg)
for i in lst:
    ans=0
    for j in tmp:
        if re.findall(j,i):
            ans+=1
    print(ans)

B Phrase String

纯模拟。
先确定有多少对 0 0 0可以往里填。
然后开始从第二位和倒数第二位开始抹 1 1 1。(因左右端点已经确定是 1 1 1
要知道 ( 2 4 − 1 ) 10 = 1000 0 2 − 1 10 = 111 1 2 {(2^4-1)} _{10}=10000_{2}-1_{10}=1111_{2} (241)10=100002110=11112

v,k = map(int, input().split())
S = (v-k)//2
if S >= 0:
    res = pow(2,v)-1
    for i in range(S):
        res = res - pow(2,v-2-i) - pow(2,i+1)
else:
    res = pow(2,k)-1
x = res%1000000007
print(x)

D 赞迪卡之声妮莎与奥札奇

博弈题。

#include
using namespace std;
int n,t;
int main()
{
    scanf("%d",&t);
    while(t--)
    {     
        scanf("%d",&n);
        if(n==1) printf("Kozilek, Butcher of Truth\n");
        else printf("Ulamog, the Infinite Gyre\n");
    }
    return 0;
}

F 紫魔法师

真的实在不知道这个 n n n有什么用。
就硬染色就行。
一般是二分图的话,两个颜色染色最佳。如果出现第三个颜色(也就是奇数环),那么代表它不是二分图。
1 1 1开始染色 1 1 1。遇到颜色冲突了,就证明要上第三种颜色了,那就输出 3 3 3

#include 
using namespace std;
const int maxn=100010;

struct Edge
{
    int u, v, next;
}edge[maxn<<2];
int head[maxn];
int cnt;
void add_edge(int u, int v)
{
    edge[cnt].u = u;
    edge[cnt].v = v;
    edge[cnt].next = head[u];
    head[u] = cnt++;
}

int n,m,x,y,color[maxn];
int flag;
void dfs(int u,int now){
    color[u]=now;//染色
    if(flag)//已经确定不是二分图了,直接return
        return;
    for(int i=head[u];i!=-1;i=edge[i].next){
        int v=edge[i].v;
        if(!color[v]) dfs(v,3-now);//如果没上色,那么就dfs,反正3-1=2,3-2=1
        else if(color[v]==now){//颜色冲突
            flag=1;
            return;
        }
    }
}
int main()
{
    cin>>n>>m;
    memset(head,-1,sizeof(head));
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        add_edge(x,y);
        add_edge(y,x);
    }
    if(n==1) puts("1");
    else {
        dfs(1,1);
        if(!flag) puts("2");
        else puts("3");
    }
    return 0;
}

完结。

你可能感兴趣的:(ACM)