签到题。
题意:学校设立了ABC三门课,给出七个数据(选A的人数,选B的人数,选C的人数,AB,BC,AC,ABC)。数据可能有错误,忽略错误的数据,求最多可能的总人数。
思路:画Venn图,每部分不小于零,有错误数据。求解。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<math.h>
using namespace std;
int main()
{
int T, N;
int a,b,c,ab,bc,ac,abc;
scanf("%d",&T);
while(T--) {
scanf("%d",&N);
int tmp,ans=0;
while(N--) {
scanf("%d%d%d%d%d%d%d",&a,&b,&c,&ab,&bc,&ac,&abc);
ab -= abc; bc -= abc; ac -= abc;
a -= (ab+ac+abc);
b -= (ab+bc+abc);
c -= (ac+bc+abc);
if (a<0||b<0||c<0||ab<0||bc<0||ac<0) tmp=0;
else tmp = a+b+c+ab+ac+bc+abc;
ans = max(tmp,ans);
}
printf("%d\n",ans);
}
return 0;
}
1003 Inversion
题意:给出一个数列A,下标从1开始。Bi是Aj中的最大值,其中i>=2,j不能整除i。
思路:直接对数组A sort 一下,按照数值从大到小排序,对于每个下标 j 暴力找到最大的不被 i 整除的数。
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
struct node{
int id, x;
}a[100005];
bool cmp(node a, node b)
{
return a.x > b.x;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--){
memset(a,0,sizeof(a));
scanf("%d",&n);
for (int i=0;i<n;i++){
scanf("%d",&a[i].x);
a[i].id = i+1;
}
sort(a,a+n,cmp);
for (int i=2;i<=n;i++){
for (int j=0;j<n;j++){
if(a[j].id % i){
if(i==n) printf("%d\n",a[j].x);
else printf("%d ",a[j].x);
break;
}
}
}
}
return 0;
}