浙江理工大学2019年新生赛_算法小猪的博客-程序员宝宝

技术标签: 训练赛  

问题 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 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<<endl;
        else if(x==2)
            cout<<1<<endl;
        else if(x>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<<a[x]<<endl;
        }
    }
}

问题 C: Brain Power

题目描述

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<bits/stdc++.h>
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<n;i++)
		{
			if(str1[i]=='a'||str1[i]=='A'||str1[i]=='e'||str1[i]=='E'||str1[i]=='i'||str1[i]=='I'||str1[i]=='o'||str1[i]=='O'||str1[i]=='u'||str1[i]=='U'||str1[i]=='j'||str1[i]=='J')
				//str2+=str1[i];
			str2.push_back(str1[i]);
		}
		for(int i=0;i<str2.size();i++)
		{
			int sum=0;
			if(str2[i]=='j'||str2[i]=='J') 
			{
				int j=i;
				while(str2[j]=='j'||str2[j]=='J') 
				{
					sum++;
					j++;
				}
				if(str2[i]>='a'&&str2[i]<='z')
				{
					str2[i]=str2[i]-32;
					cout<<str2[i]; 
				}
				else cout<<str2[i];
				i=i+sum-1;
			} 
			else if(str2[i]=='a'||str2[i]=='A'||str2[i]=='e'||str2[i]=='E'||str2[i]=='i'||str2[i]=='I'||str2[i]=='o'||str2[i]=='O'||str2[i]=='u'||str2[i]=='U')
			{
				int f=i;
				while((str2[f]==str2[i]||(str2[f]-32)==str2[i]||(str2[f]+32)==str2[i])) 
				{
					sum++;
					f++;
				}
				if(str2[i]>='a'&&str2[i]<='z') 
				{
					str2[i]=str2[i]-32;
					cout<<str2[i];
				} 
				else cout<<str2[i];
				if(sum>1) 
				{
					if(sum==4)
					{
						if(str2[i]>='a'&&str2[i]<='z')str2[i]=str2[i]+32;
						for(int f=1; f<4; f++)cout<<str2[i];
					} 
					else 
					{
						f=i+1;
						while((str2[f]==str2[i]||(str2[f]-32)==str2[i]||(str2[f]+32)==str2[i]))
						{
							if(str2[f]>='A'&&str2[f]<='Z') 
							{
								str2[f]=str2[f]+32;
								cout<<str2[f];
							} 
							else cout<<str2[f];
							f++;
						}
					}
				}
				i=i+sum-1;
			}
		}
		cout<<endl;
	}
}

问题 D: NotNight打区域赛

题目描述

区域赛共有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<stdio.h>
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");
    }
}

问题 E: 快乐的duxing201606

题目描述

duxing201606来到了教室,看到旁边坐了一个妹子。duxing201606想要搭讪,于是duxing201606灵机一动,设计出了一个游戏。现在他在纸上画了一个半径为x的圆,妹子和duxing201606轮流在圆中画长y宽z的长方形(长方形是可以任意角度画上去的,画的长方形不能重合),谁画不下长方形谁就输了。作为游戏设计者,duxing201606想要知道在双方都使用最优策略的情况下,谁会获胜。妹子先画,duxing201606后画。

输入

三个整数x,y,z,分别代表圆半径,长方形长和宽(1<=x,y,z<=10000)

 

输出

如果duxing201606赢了,输出“forever loney”

如果duxing201606输了,输出“clever duxing201606”

注意,请只输出双引号内部的内容

提示

样例解释或提示:

无论对方画在哪里,画完之后duxing01606都没法画了,所以duxing1606输了

题解:

如果y>=x*2或者z>=x*2时,duxing201606赢

代码:

#include<bits/stdc++.h>
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"<<endl;
    else cout<<"clever duxing201606"<<endl;
}

 

问题I:送温暖

题目描述

独行哥开着货车去给山里的孩子送温暖,为了把物资尽快送到孩子们面前,独行哥选择在山路上漂移。如果货车左右两边的质量差距过大的话,漂移的时候就会翻车。物资必须被固定在货车的左右两边之一,才能保证在独行哥漂移时不被损坏。假设不放置物资时,货车左右两边质量恰好相等,现在独行哥想知道应该怎么样放置物资,才能使货车左右两边质量差最小。

输入

第一行一个整数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<bits/stdc++.h>
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<bits/stdc++.h>
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;
}

问题 J: 圈圈

题目描述

Ulire有一块菱形木板,他想在上面切下两个圆,要求在第一个圆尽可能大的前提下让第二个圆也尽可能大。Ulire显然是知道怎么切的,但他现在沉迷于Brain Power无法自拔,就把问题委托给了你。

输入

两个正整数a和b,表示菱形两个对角线的长度。(1<=a,b<=100)

输出

输出一个数,为第二个圆的半径,数据要求精确到小数点后四位。

样例输入

2 2

样例输出

0.1213

题解:

注意:double型必须和double型做运算。

两种方法:1、把int型改成double

                  2、在后面加上*1.0

代码:

#include<bits/stdc++.h>
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));
}

问题 M: 签到

题目描述

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<bits/stdc++.h>
using namespace std;
string s,n;
int main()
{
    cin>>n;
    cin>>s;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='1')s[i]='0';
        else if(s[i]=='0')s[i]='1';
    }
    cout<<s<<endl;
} 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xzerui/article/details/103445093

智能推荐

python(八)——获取路径下所有子目录,或非目录子文件_柚芷的博客-程序员宝宝_python 获取子目录下的所有文件

def file_name(file_dir): '''获取路径下所有子目录、或非目录子文件''' print('a') for root, dirs, files in os.walk(file_dir): print(root) #当前目录路径 print(dirs) #当前路径下所有子目录 ...

大数据BI工具Tableau学习【第一期】:Tableau简介和安装_张国荣家的弟弟的博客-程序员宝宝_bi工具tableau

tableau 使命:tableau是一个可视化分析平台,也可以是一种辅助性决策的工具软件,它改变了我们使用数据解决问题的方式,使个人和组织能够充分利用自己的数据。它的能力1.tableau帮助个人和组织提供数据驱动水平2.凭借人人可用的直观可视化分析,打破了商业智能行业的原有格局3.tableau帮助人们使用数据推动变革客户现身说法...

统计一个字符串中每种字符出现的次数 ?_Sword_meaning的博客-程序员宝宝

var str="HELLOWORLD" ; var arr=[] ; for(var i=0 ;i&lt;str.length ;i++){ var char=str[i] ; //console.log(char) ; //通过打印char我们得到的是下面这样一个关联数组 ; ![](https://img-blog.csdnimg.cn/20191109153203371.pn...

Leetcode--计算一个字符串中最长的有效括号字符长度_你听的到、的博客-程序员宝宝

Leetcode–计算一个字符串中最长的有效括号字符长度首先这又是一道括号匹配的问题,我这里先记录一下之前几道类似的题目:1、给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。思路:首先空串题目认为是有效字符串,这里只需简单判断...

深度学习中遇到的各种参数总结_躺着醒,醒着睡的博客-程序员宝宝_深度学习中的参数

深度学习里面的各种参数做一个学习记录提示:自己根据自己的理解写的,水平有限,仅供参考,如有错误,欢迎指正个人学习记录,仅供参考深度学习里面的各种参数做一个学习记录1. batchsize,iteration,epoch2. filter,kernel_size,stride,padding3. ReLU,sigmoid,softmax4. BatchNormal,Dropout,num_classes,mini_batch5. receptive field1. batchsize,iteratio

TDC-GP22的研究_我信张i的博客-程序员宝宝_tdc-gp22

本资源包含TDC-GP22的使用手册,TDC芯片寄存器的官方配置,本人基于stm32写的TDC-GP22寄存器配置程序,TDC-GP22的接线图和一个用文档方式写的注意事项文件:url80.ctfile.com/f/25127180-557023468-dd5834(访问密码:551685)以下内容无关:setState同步异步场景React通过this.state来访问state,通过this.setState()方法来更新state,当this.setState()方法被调用的时候,Reac

随便推点

Linux SDK之uClinux、Broadcom、Atheros、Realtek、Ralink、Marvell、Intel_laifu_ma的博客-程序员宝宝

接触的Linux SDK越来越多,整理整理,分享分享,不求系统全面,对您有帮助便足矣文中大部分是与AP/Router SoC解决方案相关的Linux SDKSDK(Software Development Kit)软件开发工具包一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合想想,最早接触到的SDK是在Cort

一个自己编写的象棋程序,可实现走棋谱(如炮二平五),工程完成度%96,跟大家分享一下,下一步要做残局,欢迎交流_NORMAN兴宇的博客-程序员宝宝

#include#include#include #includechar qipan[10][9]={{'A','B','C','D','E','D','C','B','A'},{'+','+','+','+','+','+','+','+','+'},{'+','F','+','+','+','+','+','F','+'},{'G','+','G','+','G','+'

ubuntu WPS 报错系统缺失字体symbol、wingdings、wingdings 2、wingdings 3_Haochengqi的博客-程序员宝宝_系统缺失字体:symbol

出现提示的原因是因为WPS for Linux没有自带windows的字体,只要在Linux系统中加载字体即可。1下载缺失的字体文件,然后复制到Linux系统中的/usr/share/fonts文件夹中, 解压http://pan.baidu.com/s/1mh0lcbY2执行以下命令,生成字体的索引信息:sudo mkfontscalesudo mkfontdir3运行fc-cache命令更新字体缓存sudofc-cache4. 重启w...

Java面试题十五(Kafka)_夏至青柠的博客-程序员宝宝

152.kafka 可以脱离 zookeeper 单独使用吗?为什么?  kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafka 的节点服务器。153.kafka 有几种数据保留的策略?  kafka 有两种数据保存策略:按照过期时间保留和按照存储的消息大小保留。154.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?  这个时候 kafka 会执行数据清除工作,

CAN中继 can总线中继器、can总线中继模块波特率和滤波设置_mmprime的博客-程序员宝宝_can中继器

can总线隔离中继器、canbridge、CanRepeater的can波特率和验收滤波设置。波特率支持2.5kbps~1Mbps之间任意设置,验收滤波设置支持20个组合的列表或屏蔽模式的ID过滤。1、配套的配置软件是绿色软件,无需安装,直接双击打开软件:2、搜索设备-读取配置3、设置can通道通讯波特率“CAN0参数”设置界面对应can总线隔离中继器的CAN1通道;“CAN1参数...

Bash shell echo如何原生输出带空格的字符串而不换行_ethnicitybeta的博客-程序员宝宝_shell输出空格

假如我们有一个文本文件 coder.txt,内容如下:Twinkle, twinkle, little star,How I wonder what you are.然后我们使用 cat 逐行打印这个文件,在终端中执行以下指令:cat coder.txt输出效果:那么现在有一个需求,假如需要对每行文本做进一步的处理,在bash中使用for循环逐行处理。我们先这样写:for f in `cat coder.txt`; do echo $f; done我们预期会像cat指令一样.