Powered by:AB_IN 局外人
元組組成的列表
s
o
r
t
sort
sort。用個
l
a
m
b
d
a
lambda
lambda即可。
按照長度排序:
for _ in range(int(input())):
a=input()
b=input()
c=input()
d=input()
lst=[(len(a),"A"),(len(b),"B"),(len(c),"C"),(len(d),"D")]
lst.sort(key=lambda x:x[0])
if lst[0][0]!=lst[1][0]:
print(lst[0][1])
elif lst[3][0]!=lst[2][0]:
print(lst[3][1])
else:
print("C")
首先先把基本表打出來,從 1 1 1開始到 n n n, 0 , 1 , 3 , 6 , 10 , 15 … … 0,1,3,6,10,15…… 0,1,3,6,10,15……
將輸入的列表分別減去模板,差值作為下標利用 m a p map map進行自增,同一特質的序列差值都是一樣的,所以看差值自增最多的,就是改最少的序列。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e8+10;
ll n,b[N],x,ans;
unordered_map <ll, ll> a;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) b[i]=b[i-1]+i-1;
for(int i=1;i<=n;i++){
cin>>x;
a[x-b[i]]++;
ans=max(ans,a[x-b[i]]);
}
cout<<n-ans<<endl;
}
先把兩個都是 > k \gt k >k的邊用並查集連起來,再把含有 k ≤ k\le k≤的邊進行判斷,如果這倆本身連起來了,那麼這倆就得拆開, a n s + + ans++ ans++。如果沒有連起來,就讓他們連起來。
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int n,m,k,ans;
int fa[N],a[N],b[N];
inline void finit ()
{
for(int i=1;i<=n;i++) fa[i]=i;
}
inline int find(int x)
{
if(fa[x] == x) return x;
return fa[x] = find(fa[x]);
}
inline void join(int a,int b)
{
int a1=find(a),b1=find(b);
if(a1!=b1) fa[a1]=b1;
}
int main()
{
cin>>n>>m>>k;
finit();
for(int i=1;i<=m;i++){
cin>>a[i]>>b[i];
if(a[i]>k && b[i]>k) join(a[i],b[i]);
}
for(int i=1;i<=m;i++){
if(a[i]<=k || b[i]<=k){
int u=find(a[i]);
int v=find(b[i]);
if (u==v) ans++;
fa[u]=v;
}
}
cout<<ans<<endl;
return 0;
}
完結。