1
A :
最多有3*k个人玩明日方舟,但人数为n,所以玩明日方舟总人数 t 为min(3*k,n)
剩下n-t个人中,最多999个人玩fgo,总人数为min(n-t,999)
n,k=map(int,input().split()) t=min(n,3*k) print(t) print(min(n-t,999))
B:
理解题目意思即可,必然有至少一个混沌的字符串与那人的名字相等,这句话的意思就是最短的那个字符串就是答案,直接输出最短的字符串即可
n=int(input()) print(min([input() for i in range(n)],key=lambda x:len(x)))
C:
找规律题,可以把1异或到20都列举出来
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0 1 3 0 4 1 7 0 8 1 11 0 12 1 15 0 16 1 19 0 20
瞪眼易证法 : 存在如下规律,每4个一循环 , 当 n%4==0或 n==1 时, 答案为n, 当n%4==3时,答案为n-1 ,其他情况为-1
for i in range(int(input())): n=int(input()) if n%4==0 or n==1: print(n) elif n%4==3: print(n-1) else: print(-1)
D :
此为麦乐鸡定理,证明比较复杂,需要可以自己上网查询,也可以参照上一题的打表方式看出规律。
结论就是:当a与b的最大公约数为1的时候,答案为a*b-a-b,否则为INF
import math for i in range(int(input())): a,b=map(int,input().split()) if math.gcd(a,b)==1: print(a*b-a-b) else: print('INF')
E:
此为一个n个节点,n-1条边的图,并且全联通,拿起必然是一个树。首先使用领接表或者其他方式建图,由于1号节点不能去,删去与1号节点相连的所有边。剩下的就是以a和b为起始点,分别跑一遍广度优先搜索或者深度优先搜索或者最短路算法等等,算出能跑的最大距离,之后看谁能跑的最大距离更大即可(这题真的比D简单吗,原来这题是想放D题的位置的)
#include <bits/stdc++.h> //#include <bits/extc++.h> using namespace std; //using namespace __gnu_pbds; typedef long long ll;typedef unsigned long long ull; //typedef __int128_t i128;typedef __uint128_t ui128; typedef pair<int, int> pii;typedef pair<ll, ll> pll; const int MAXN=2e5+5,INF=0x3f3f3f3f,MOD=998244353; const ll LLINF=0x3f3f3f3f3f3f3f3f; //const double PI=acos(-1); vector<int> s[MAXN]; int dfs(int nd,int par) { if(nd==1) return 0; int ma=0; for (auto i:s[nd]) { if(i==par) continue; ma=max(ma,dfs(i,nd)); } return ma+1; } void solve() { int n;cin>>n; int a,b;cin>>a>>b; for (int i=0; i<n-1; ++i) { int u,v;cin>>u>>v; s[u].push_back(v);s[v].push_back(u); } int x=dfs(a,a),y=dfs(b,b); cout<<(x>y?"Alice":"Bob")<<'\n'; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); //int cases;cin>>cases;while(cases--) solve(); return 0; }
import collections import sys input=lambda:sys.stdin.readline().rstrip() n=int(input()) inf=float('inf') a,b=map(int,input().split()) g=collections.defaultdict(list) for i in range(n-1): u,v=map(int,input().split()) if u==1 or v==1: continue g[u].append(v) g[v].append(u) def bfs(x): dis=[inf]*(n+1) dis[x]=0 que=collections.deque() que.append(x) while que: u=que.popleft() for v in g[u]: if dis[v]==inf: dis[v]=min(dis[u]+1,dis[v]) que.append(v) return max([i for i in dis if i !=inf]) if bfs(a)>bfs(b): print("Alice") else: print("Bob")
F :
待写(