7-3 奥运排行榜 (25分)
#include
#include
#include
using namespace std;
struct node
{
int gold,medal,people;
double x,y;
}s[100010];
int main()
{
int N,M,i,j,minn=255,index=0;
scanf("%d%d",&N,&M);
for(i=0;i<N;i++)
{
scanf("%d %d %d",&s[i].gold,&s[i].medal,&s[i].people);
s[i].x=s[i].gold*1.0/s[i].people;
s[i].y=s[i].medal*1.0/s[i].people;
}
for(i=0;i<M;i++)
{
int a[4]={1,1,1,1},p;
scanf("%d",&p);
for(j=0;j<N;j++)
{//数字最小的那种方式,排名最靠前
if(s[j].gold>s[p].gold)
a[0]++;
if(s[j].medal>s[p].medal)
a[1]++;
if(s[j].x>s[p].x)
a[2]++;
if(s[j].y>s[p].y)
a[3]++;
}
for(j=0;j<4;j++)
{
if(a[j]<minn)
{
minn=a[j];
index=j+1;
}
}
if(i==0)
printf("%d:%d",minn,index);
else
printf(" %d:%d",minn,index);
minn=255;
}
return 0;
}
7-4 抢红包 (25分)
#include
#include
#include
using namespace std;
struct node
{
double data;//money
int Glnum;//抢到红包数
int num;//编号
}p[10000];
int cmp(struct node a,struct node b)
{
return a.data>b.data;
}
int main()
{
int n;
scanf("%d",&n);
for(int k=1;k<=n;k++)
{
p[k].num=k;
p[k].data=0;
p[k].Glnum=0;
}
for(int i=1;i<=n;i++)
{
int k;
scanf("%d",&k);
for(int j=0;j<k;j++)
{
int a;
double b;
scanf("%d%lf",&a,&b);
p[a].data+=b;
p[a].Glnum++;
p[i].data-=b;
}
}
sort(p+1,p+n+1,cmp);
for(int q=1;q<n;q++)
{
if(p[q].data==p[q+1].data)
{
if(p[q].Glnum<p[q+1].Glnum)
{
swap(p[q],p[q+1]);
}
else if(p[q].Glnum==p[q+1].Glnum)
{
if(p[q].num>p[q+1].num)
{
swap(p[q],p[q+1]);
}
}
}
printf("%d %.2lf\n",p[q].num,p[q].data/100);
}
printf("%d %.2lf\n",p[n].num,p[n].data/100);
return 0;
}
7-5 互评成绩 (25分)
#include
#include
#include
using namespace std;
int main()
{
int n,k,m,j=0,i;
cin>>n>>k>>m;
double score[k];
double s[n]={0},h[n]={0};
int p=n;
while(p--)
{
for(i=0;i<k;i++)
{
cin>>score[i];
}
sort(score,score+k);
for(i=1;i<k-1;i++)
{
s[j]+=score[i];
}
h[j]=s[j]/(double)(k-2);
j++;
}
sort(h,h+n);
for(i=n-m;i<n;i++)
{
if(i==n-m)
printf("%.3lf",h[i]);
else
printf(" %.3lf",h[i]);
}
return 0;
}
7-7 人以群分 (25分)
#include
using namespace std;
bool cmp( int a, int b)
{
return a>b;
}
int main()
{
int n;
int a[100010];
int i,j,k,sum1,sum2,x,y,sum;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n+1,cmp);
if(n%2==0)
{
x=n/2;
y=n/2;
}
else
{
x=n/2+1;
y=n/2;
}
sum1=sum2=0;
for(i=1;i<=x;i++)
{
sum1=sum1+a[i];
}
for(i=x+1;i<=n;i++)
{
sum2=sum2+a[i];
}
sum=abs(sum1-sum2);
printf("Outgoing #: %d\n",x);
printf("Introverted #: %d\n",y);
printf("Diff = %d\n",sum);
return 0;
}
7-8 悄悄关注 (25分)
#include
#include
#include
#include
#include
using namespace std;
int n,m,ave,sum=0;
map<string,int> mp,sdf;
string ss[10005],re[10005];
bool cmp(string a,string b){
return a<b;
}
int main()
{ scanf("%d",&n);
int a;
string s;
for(int i=0;i<n;i++){
cin>>s;
mp[s]=1;
}
scanf("%d",&m);
for(int i=0;i<m;i++){
cin>>ss[i]>>a;
sdf[ss[i]]=a;
sum+=a;
}
int num=0;
ave=sum/m;
//cout<
for(int i=0;i<m;i++){
if(sdf[ss[i]]>ave&&mp[ss[i]]==0)
re[num++]=ss[i];
}
if(num==0){
cout<<"Bing Mei You\n";
}
else {
sort(re,re+num,cmp);
for(int i=0;i<num;i++){
cout<<re[i]<<endl;
}
}
return 0;
}
7-1 模拟EXCEL排序 (25分)
#include
#include
#include
#include
#include
using namespace std;
struct Excel
{
int data;
char s[10];
int score;
}p[100001];
int cmp1(struct Excel a,struct Excel b)
{
return a.data<b.data;
}
int cmp2(struct Excel a,struct Excel b)
{if(strcmp(a.s,b.s)==0)
return a.data<b.data;
else
return strcmp(a.s,b.s)<0;
}
int cmp3(struct Excel a,struct Excel b)
{if(a.score==b.score)
return a.data<b.data;
else
return a.score<b.score;
}
int main()
{ int n,c;
scanf("%d%d",&n,&c);
for(int i=0;i<n;i++)
{
scanf("%d %s %d",&p[i].data,p[i].s,&p[i].score);
}
if(c==1)
sort(p,p+n,cmp1);
else if(c==2)
sort(p,p+n,cmp2);
else if(c==3)
sort(p,p+n,cmp3);
for(int i=0;i<n;i++)
{
if(i==n-1)
printf("%06d %s %d",p[i].data,p[i].s,p[i].score);
else
printf("%06d %s %d\n",p[i].data,p[i].s,p[i].score);
}
return 0;
}
7-2 魔法优惠券 (25分)
#include
#include
#include
#include
using namespace std;
int main()
{
int n,sum=0,i,s,ha,hb,j;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int m;
scanf("%d",&m);
int b[m];
for(i=0;i<m;i++)
{
scanf("%d",&b[i]);
}
sort(b,b+m);
if(n==m)
{for(i=0;i<n;i++)
{
s=a[i]*b[i];
if(s>0)
sum+=a[i]*b[i];
}
}
else
{for(i=0;i<n;i++)
{if(a[i]>0)
{ha=i;
break;
}
}
if(i==n)
ha=n;
for(i=0;i<m;i++)
{if(b[i]>0)
{ hb=i;
break;
}
}
if(i==m)
hb=m;
for(i=0,j=0;i<ha&&j<hb;i++,j++)
{s=a[i]*b[j];
if(s>0)
sum+=a[i]*b[j];
}
for(i=n-1,j=m-1;i>=ha&&j>=hb;i--,j--)
{
s=a[i]*b[j];
if(s>0)
sum+=a[i]*b[j];
}
}
printf("%d",sum);
return 0;
}
7-6 集合相似度 (25分)
Nc(交集)
Nt(并集)
set用法1
set用法2
#include
#include
using namespace std;
set<int> g[55];//不会有重复数字
int main()
{
int i,m,k,n;
int x,y;
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++)
{
scanf("%d",&k);
while(k--)
{
scanf("%d",&x);
g[i].insert(x);
}
}
scanf("%d",&m);
while(m--)
{
set<int>::iterator it;
scanf("%d%d",&x,&y);
int ans=0;
for(it=g[x].begin();it!=g[x].end();it++)
{
if(g[y].find(*it)!=g[y].end())//没有找到相同的值的时候,就会返回end(),找到相应的值会返回地址
ans++;
}
int sum=g[x].size()+g[y].size();
sum-=ans;
double cnt=1.0*ans/sum*100;
printf("%.2lf%\n",cnt);
}
}
return 0;
}