问题 A: 你的名字
题目描述
Walfy同时喜欢上了n个妹子,第i个妹子的智力值为ai魅力值为bi。为了防止妹子们发现walfy是个渣男,现在walfy要给妹子排个序,这样他能按照这个排序分配和妹子聊天的时间。排序规则如下:智力高的妹子需要花费更多的时间来聊天,如果智力一样,那么魅力高的花费的时间将会多一点;如果她们的魅力也一样,姓名字典序更小的花费的时间也将多一点。
对于字典序大小的定义,对于字符串s和t来说,如果s<t,则存在一个k,对于所有i小于k,si==ti,且sk<tk。例如“abb” < “ac”,“acc”<“accb”。
由于他将所有时间都用于和妹子聊天了,他现在要请求你的帮助。
输入
a第一行输入一个正整数T,表示测试用例的数量。接下来是测试用例。
每个测试用例的第一行包含一个正整数n,含义见上文;
接下来的n行,每行一个字符串s和两个整数ai,bi,用空格隔开,表示妹子的姓名、智力和魅力;
数据范围:( 1 <= T <= 10, 1 <= n <= 1000, 1 <= |s| <= 10, 1<= ai,bi <= 1000,同一个测试用例没有两个妹子有同样的名字,且名字只包含小写英文字母)
输出
每个测试用例输出n个值,第i个值代表第i个妹子花费时间是第几大的。
样例输入
3
2
abb 2 1
ac 1 100
3
abb 1 1
accb 1 1
acc 2 1
3
abb 1 1
ac 1 1
accb 1 1
样例输出
1 2
2 3 1
1 2 3
提示
样例解释或提示:
第一组样例,abb的智商更高所以Walfy在她身上花费的时间更多。
第二组样例,acc的智商最高,所以在她身上花费的时间是第一大的,之后因为acc的名字字典序更小,所以在她身上花费的时间是第二大的。
题解:
多特征值排序,写个冒泡或者sort都行
代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int zs,ml;
string name;
int num2,num1;
}a[1005];
int comp(node a,node b)
{
return a.num1<b.num1;
}
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].name>>a[i].zs>>a[i].ml;
a[i].num1=i;
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
if(a[i].zs<a[j].zs)swap(a[i],a[j]);
else if(a[i].zs==a[j].zs)
{
if(a[i].ml<a[j].ml)swap(a[i],a[j]);
else if(a[i].ml==a[j].ml)
if(a[i].name>a[j].name)swap(a[i],a[j]);
}
}
for(int i=1;i<=n;i++)a[i].num2=i;
sort(a+1,a+1+n,comp);
for(int i=1;i<=n;i++)cout<<a[i].num2<<" ";
cout<<endl;
}
}
问题 B: duxing201606很快乐
题目描述
世界上没有两片完全相同的树叶,同样的,KFC也没有两个完全相同的原味鸡。而duxing哥是一个非常讲究的人,面对一个原味鸡,自己总是能说出这是第X级的原味鸡。可是duxing哥有点不满意,他希望知道这个原味鸡的美味值是多少。经过研究,他发现第X级的原味鸡美味值=第x-1级的原味鸡的美味值*1+第x-2级的原味鸡的美味值*2+.....+第1级原味鸡美味值*(x-1)。也就是:设第x级的原味鸡美味值是fx,那么fx=∑i=1x-1(x-i)*fi。
当然了,这一切需要一个基准,duxing哥把第1级的原味鸡美味值定为1,即f1=1
可是这个计算对于duxing哥来说太麻烦了,所以他把这个任务交给了你,给你一个x,问你第x级原味鸡美味值是多少?
输入
一个数x(1<=x<=40)
输出
一个数,表示第x的原味鸡美味值
样例输入
【输入样例1】
2
【输入样例2】
7
样例输出
【输出样例1】
1
【输出样例2】
144
题解:
递推题,双重for循环就能搞定(打表也行,数据量不大)
注意数组要开long long型,不然会运行错误
代码:
#include<bits/stdc++.h>
using namespace std;
long lon