A. Bear and Elections
题目大意:n个数,求第一个数至少需要从其他数中拿走多少个数才能使得第一个数比其他所有数都大
解题思路:模拟直至满足条件
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <list>
#include <set>
using namespace std;
const int maxn = 100+10;
int a[maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
sort(a+1,a+n);
int ans = 0;
while(a[0] <= a[n-1])
{
a[0] += 1;
ans += 1;
a[n-1] -= 1;
sort(a+1,a+n);
}
printf("%d\n",ans);
return 0;
}
B. Bear and Three Musketeers
题目大意:给出n(4000)个人,m种关系,求三个人相互认识且共认识的除该3个人外的其他人数最小为多少
解题思路:暴力,简单图,先判断是否满足3个相互认识这一条件,再更新最小值
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <stack>
using namespace std;
const int maxn = 4000+100;
const int INF = 0xffffff;
int G[maxn][maxn],cnt[maxn];
int main()
{
int n,m,a,b;
int ans;
while(~scanf("%d%d",&n,&m))
{
memset(G,0,sizeof(G));
memset(cnt,0,sizeof(cnt));
for(int i = 0; i < m; i++)
{
scanf("%d%d",&a,&b);
G[a][b] = G[b][a] = 1;
cnt[a]++;
cnt[b]++;
}
ans = INF;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
if(!G[i][j]) continue;
for(int k = 1; k!=i&&k!=j&&k<=n; k++)
{
if(G[i][k] && G[j][k])
{
if(cnt[i]+cnt[j]+cnt[k]-6 < ans)
{
ans = cnt[i]+cnt[j]+cnt[k]-6;
}
}
}
}
}
printf("%d\n",ans==INF?-1:ans);
}
return 0;
}
C. Bear and Poker
题目大意:给出n(1e5)个数,求这n个数在×3或x2之后会不会得到同一个数
解题思路:把原题转换成每个数除以2或3之后会不会得到同一个数
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <stack>
using namespace std;
const int maxn = 100000+100;
int a[maxn];
int main()
{
int n,flag;
while(~scanf("%d",&n))
{
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
while(!(a[i]%2)) a[i] /= 2;
while(!(a[i]%3)) a[i] /= 3;
}
flag = 0;
for(int i = 1; i < n; i++)
if(a[i] != a[i-1])
{
flag = 1;
break;
}
if(flag) puts("No");
else puts("Yes");
}
return 0;
}