Walfy同时喜欢上了n个妹子,第i个妹子的智力值为ai魅力值为bi。为了防止妹子们发现walfy是个渣男,现在walfy要给妹子排个序,这样他能按照这个排序分配和妹子聊天的时间。排序规则如下:智力高的妹子需要花费更多的时间来聊天,如果智力一样,那么魅力高的花费的时间将会多一点;如果她们的魅力也一样,姓名字典序更小的花费的时间也将多一点。
对于字典序大小的定义,对于字符串s和t来说,如果s
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
using namespace std;
struct node
{
int zs,ml;
string name;
int num2,num1;
}a[1005];
int comp(node a,node b)
{
return a.num1>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].zsa[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<
世界上没有两片完全相同的树叶,同样的,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
using namespace std;
long long a[45],x;
int main()
{
while(cin>>x)
{
memset(a,0,sizeof(a));
a[1]=1,a[2]=1;
if(x==1)
cout<<1<2)
{
for(int i=3; i<=x; i++)
{
for(int j=1; j<=i-1; j++)
{
a[i]=a[i]+a[i-j]*j;
}
}
cout<
Ulire沉迷Brain Power以后,见到啥都想先O-oooooooooo AAAAE-A-A-I-A-U- JO-oooooooooooo AAE-O-A-A-U-U-A- E-eee-ee-eee AAAAE-A-E-I-E-A- JO-ooo-oo-oo-oo EEEEO-A-AAA-AAAA一下。
总之,现在Ulire给你一个字符串s,要求你按照以下规则处理字符串:
1) 删除字符串中除了元音字母和字母‘j’(不区分大小写)以外的所有字符。
2) 对于连续出现的字符(不区分大小写),第一个字母须为大写,其余字母须为小写;如果这个字符恰好连续出现了4次,则这4个字母都要为大写。
3) 对于连续出现的 ‘j’(不区分大小写),只保留第一个。
第一行一个T表示有T组数据
每组有一个字符串。(仅包含大小写字母)
字符串总长度 <= 500
1
aaaaaeeeeei
AaaaaEeeeeI
题目本身不难,难在对题目意思的理解上
题意为:先删除一些字符,成为一个新的字符串,再进行操作
代码:
#include
using namespace std;
string str1,str2;
int t;
int main()
{
cin>>t;
while(t--)
{
cin>>str1;
int n=str1.size();
int k=0;
str2.clear();
for(int i=0;i='a'&&str2[i]<='z')
{
str2[i]=str2[i]-32;
cout<='a'&&str2[i]<='z')
{
str2[i]=str2[i]-32;
cout<1)
{
if(sum==4)
{
if(str2[i]>='a'&&str2[i]<='z')str2[i]=str2[i]+32;
for(int f=1; f<4; f++)cout<='A'&&str2[f]<='Z')
{
str2[f]=str2[f]+32;
cout<
区域赛共有n只有效参赛队伍,NotNight的队伍排在第k个,在主持人公布获奖名单前,他想知道他获得的奖项。
区域赛奖牌发放规则:竞赛按照有效参赛队的10%,20%,30%比例产生金奖、银奖和铜奖(均向上取整)。
第一行输入一个正整数T,表示测试用例的数量。
接下来T行,每行两个正整数n和k,用空格隔开。
(1<= T <= 100000, 1 <= k <= n <= 100000)
数据保证n>=3。
每行一个答案。如果NotNight获得金奖,则输出”jin”;如果获得银奖,则输出”yin”;如果获得铜奖,则输出”tong”;如果未获奖,则输出”tie”
4
10 1
10 2
10 3
10 4
jin
yin
yin
tong
注意向上取整,用(int)x+1
#include
int main()
{
int b,a,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&a,&b);
double x,y,z;
x=0.1*a;
y=0.2*a;
z=0.3*a;
if(x>(int)x)x=(int)x+1;
if(y>(int)y)y=(int)y+1;
if(z>(int)z)z=(int)z+1;
if(b<=x)printf("jin\n");
else if(b>x&&b<=x+y)printf("yin\n");
else if(b>x+y&&b<=x+y+z)printf("tong\n");
else printf("tie\n");
}
}
duxing201606来到了教室,看到旁边坐了一个妹子。duxing201606想要搭讪,于是duxing201606灵机一动,设计出了一个游戏。现在他在纸上画了一个半径为x的圆,妹子和duxing201606轮流在圆中画长y宽z的长方形(长方形是可以任意角度画上去的,画的长方形不能重合),谁画不下长方形谁就输了。作为游戏设计者,duxing201606想要知道在双方都使用最优策略的情况下,谁会获胜。妹子先画,duxing201606后画。
如果duxing201606赢了,输出“forever loney”
如果duxing201606输了,输出“clever duxing201606”
注意,请只输出双引号内部的内容
样例解释或提示:
无论对方画在哪里,画完之后duxing01606都没法画了,所以duxing1606输了
如果y>=x*2或者z>=x*2时,duxing201606赢
#include
using namespace std;
int y,z;
int x;
int main()
{
cin>>x>>y>>z;
float yuan=3.14*x*x;
int zhen=y*z;
if(y>=x*2||z>=x*2)cout<<"forever loney"<
独行哥开着货车去给山里的孩子送温暖,为了把物资尽快送到孩子们面前,独行哥选择在山路上漂移。如果货车左右两边的质量差距过大的话,漂移的时候就会翻车。物资必须被固定在货车的左右两边之一,才能保证在独行哥漂移时不被损坏。假设不放置物资时,货车左右两边质量恰好相等,现在独行哥想知道应该怎么样放置物资,才能使货车左右两边质量差最小。
第一行一个整数n(1<=n<=1e3),表示物资数量
第二行n个整数w_i(1<=w_i<=1e3),表示n个物资的质量
一行
货车左右两边最小质量差
6
2 2 5 5 8 9
1
一开始的思路是深搜,结果因为递归而TLE了
后来想到是01背包问题的变种,重量就是价值
状态转移方程是:dp[j]=max(dp[j],dp[j-w[i]]+w[i])
(深搜)
#include
using namespace std;
const int INF=0x7f;
int n,ans,sum;
int w[1005];
void dfs(int dep,int cnt)
{
if(dep==n)
{
ans=min(ans,abs(sum-2*cnt));
return;
}
dfs(dep+1,cnt+w[dep]);
dfs(dep+1,cnt);
}
int main()
{
scanf("%d",&n);
sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i]);
sum+=w[i];
}
ans=INF;
dfs(0,0);
printf("%d\n",ans);
}
#include
using namespace std;
int w[1005],n;
int dp[1000005];
int sum=0;
int main()
{
memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i]);
sum+=w[i];
}
for(int i=1;i<=n;i++)
for(int j=sum/2;j>=w[i];j--)
{
dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
}
printf("%d\n",sum-dp[sum/2]*2);
return 0;
}
Ulire有一块菱形木板,他想在上面切下两个圆,要求在第一个圆尽可能大的前提下让第二个圆也尽可能大。Ulire显然是知道怎么切的,但他现在沉迷于Brain Power无法自拔,就把问题委托给了你。
两个正整数a和b,表示菱形两个对角线的长度。(1<=a,b<=100)
输出一个数,为第二个圆的半径,数据要求精确到小数点后四位。
2 2
0.1213
注意:double型必须和double型做运算。
两种方法:1、把int型改成double
2、在后面加上*1.0
#include
using namespace std;
int a,b;
double R,rx,ry,t,x,y;
int main()
{
scanf("%d%d",&a,&b);
x=a/2.0;
y=b/2.0;
t=sqrt((double)(x*x+y*y));
R=x*y/t;
rx=(x-R)/(x+R)*R;
ry=(y-R)/(y+R)*R;
printf("%.4lf\n",max(rx,ry));
}
Ulire最近在研究哈夫曼树,一种功能是将一串字符压缩为更短的01串的数据结构,现在他发现因为写错了一个条件,导致输出的所有0都变成了1,所有1都变成了0,所以他希望你能够把这个01串变回正确的形式,当然,为了精确,他每次只会给出一个字母对应的01串,所以每个01串不会超过5位。
正式的说,你会得到一个数字n和n位由0和1组成的字符串,而你则要将其中的0和1分别变成1和0,并重新输出。
第一行输入一个正整数n(1<=n<=5),代表字符串的长度
第二行输入一个长度为n的0和1构成的串s
输出一行,将s中的0换成1,1换成0产生的新串
5
11010
00101
c++语言基础题
签到题,题如其名(不知道有没有被前面一大堆哈夫曼树吓蒙的人)
#include
using namespace std;
string s,n;
int main()
{
cin>>n;
cin>>s;
for(int i=0;i