今天对模拟类题目进行了分析与消化,对于题目,还是不能够很好的用函数思维去理解,但是,能够用基础的思想去解题,比如很多很多的数组。至于如何解题及思路,也就不说了,因为我写了篇题解。
如下
P1201贪婪的送礼者:
#include<bits/stdc++.h>//蒟蒻的代码,希望各位别太苛刻了!
using namespace std;//主要是没学多久,然后被大佬的函数看懵逼,
然而在大佬的函数下我不屈服,不用函数写出了这个
int main()
{
int NP,n[20]={},y[20],z[20];//n表示人所送出的钱,y是人拥有的要发的钱
,z是送礼者送出的礼品次数 ;
string a[20],x[20],b[20][20];//a表示人名,
x表示送礼者(和a独立,比如a[1]可能是第二个送礼者即x[2])
b表示受礼者;
cin>>NP;//输入人数
for(int i=1;i<=NP;i++)
cin>>a[i];// 输入人名
for(int i=1;i<=NP;i++)
{
cin>>x[i]/*输入送礼者*/>>y[i]/*输入发钱总数*/>>z[i];//输入发出的次数
for(int j=1;j<=z[i];j++)
{
cin>>b[i][j];//输入受礼者;
}
}
//输入完成;
for(int i=1;i<=NP;i++)
{
if(z[i]!=0)//这要排除z[i]等于0的情况,因为被除数是0会炸掉
{
for(int h=1;h<=z[i];h++)//在受礼者中与人名进行对比查找
{
for(int ii=1;ii<=NP;ii++)
{
if(b[i][h]==a[ii])//查找到后将对应的人名的花费加上收到的钱
{
n[ii]=n[ii]+y[i]/z[i];
break;//防止程序炸了
}
}
}
//对受礼者进行操作
for(int j=1;j<=NP;j++)//在被送礼者中与人名进行对比查找
{
if(x[i]==a[j])//查找到后将对应的人名的花费减去送出的钱
{
n[j]=n[j]-y[i]/z[i]*z[i];
break;
}
}
//对送礼者进行操作
}
}
//操作完成
for(int i=1;i<=NP;i++)//输出不用说什么
cout<<a[i]<<' '<<n[i]<<endl;
return 0;
}