abc262_a
题目翻译
问第 $Y$ 年后(包括第 $Y$ 年)最近一次世界杯在什么时候。
题目思路
世界杯举办的年份 $\bmod 4$ 为 $2$。
AC 代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;
cin>>a;
cout<<a+(4-(a-2)%4)%4<<endl;
return 0;
}
abc262_b
题目翻译
无向图三元环计数。
题目思路
$n=100$,$n^3$ 枚举可过。
可以用邻接矩阵。
AC 代码
#include<bits/stdc++.h>
using namespace std;
bool b[105][105];
int main()
{
int n,m,ans=0;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
b[u][v]=b[v][u]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
for(int k=j+1;k<=n;k++)
{
if(b[i][j]==1&&b[j][k]==1&&b[k][i]==1)
{
ans++;
}
}
}
}
cout<<ans<<endl;
return 0;
}
abc262_c
题目翻译
问有多少两元组 $(i,j)$ 满足:
- $1\leq i<j\leq n$。
- $\min(a_i,a_j)=i$
- $\max(a_i,a_j)=j$
题目思路
由题意可知,只有以下两种情况:
$a_i=i,a_j=j$
$a_i=j,a_j=i$
对于第一种,数一下自己下标为自己的个数,然后组合一下 $C_x^2$,$x$ 是自己下标为自己个数。
对于第二种,$j$ 可以用 $a_i$ 表示,就是 $a_{a_i}=i$ 的个数。
AC 代码
#include<bits/stdc++.h>
using namespace std;
int a[500020];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
long long ans=0,cnt=0;
for(int i=1;i<=n;i++)
{
int j=a[i];
if(a[j]==i&&i!=j)
{
ans++;
}
if(a[i]==i)
{
cnt++;
}
}
cout<<1LL*ans/2+1LL*cnt*(cnt-1)/2<<endl;
return 0;
}