传送门
A
我的思路是,现将字母都换成小写。
由于n很小,所以可以直接暴力,挨个找出。
#include<bits/stdc++.h>
using namespace std;
string a[300],b[300];
int n;
int sum;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
string c;
cin>>a[i]>>c>>b[i];
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<a[i].length();j++){
if(a[i][j]>='A'&&a[i][j]<='Z')
a[i][j]+=32;
}
for(int j=0;j<b[i].length();j++)
{
if(b[i][j]>='A'&&b[i][j]<='Z')
{
b[i][j]+=32;
}
}
}
for(int i=1;i<=n;i++)
{
int num=2;
string f=b[i];
while(1)
{
bool flag=false;
for(int j=1;j<=n;j++)
{
if(j==i)
continue;
if(a[j]==f)
{
f=b[j];
flag=true;
num++;
break;
}
}
if(!flag)
break;
}
sum=max(num,sum);
}
cout<<sum<<endl;
}
B
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int H[maxn],W,n;
struct node{
int h,w,id;
}a[maxn];
bool cmp(const node&a,const node&b){
return a.h<b.h;
}
bool cmp1(const node&a,const node&b){
return a.id<b.id;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].w,&a[i].h);
a[i].id=i;
W+=a[i].w;
}
sort(a+1,a+1+n,cmp);
int x=a[n].id;
int y1=a[n].h,y2=a[n-1].h;
sort(a+1,a+1+n,cmp1);
for(int i=1;i<=n;i++)
{
if(a[i].id==x){
H[i]=y2;
}
else H[i]=y1;
}
for(int i=1;i<=n;i++)
{
cout<<(W-a[i].w)*H[i]<<" ";
}
}