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;
}
本文解析了三道经典的编程竞赛题目:求第一个数超过其他数所需的最小调整次数、寻找三人组内部及外部联系的最小数量、判断数值经特定操作后是否相同。提供了完整的代码实现。
1332

被折叠的 条评论
为什么被折叠?



