7-5 古风排版

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:

输入在第一行给出一个正整数N(<),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4
This is a test case
 

输出样例:

asa T
st ih
e tsi
ce s

题解:输入字符串后,再设一个二维字符数组,因为第一列可能不够n个要用空格来表示,所以将每行第一个字符赋值为空格 '  ' ,因为要求共有n行,所以要求列数,求出字符串总长度m,列数则为m/n向上取整:

m%n==0?m/n:m/n+1; 最后再将字符串存入二维字符数组中,可以得到规律:第一行为字符串里从第一个字符开始每隔n个字符一存,在下一行则从第二个字符开始,隔n个存入数组中

#include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int main()
{
int n;
string s;
cin>>n;
getchar();
getline(cin,s);
int m=s.size();
//cout<<m<<"#"<<endl;
int k;
k=m%n==0?m/n:m/n+1;
//cout<<k<<endl;
char b[n+5][k+5];
for(int i=0;i<n;i++)
{
b[i][0]=' ';
}
int f=0,p=0;
for(int i=0;i<n;i++)
{
for(int j=k-1;j>=0;j--)
{
if(f>=m){
f=0;
break;
}
b[i][j]=s[f];
f+=n; }
p++;
f=p;;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<k;j++)
{
printf("%c",b[i][j]);
}
if(i<n-1) cout<<endl;
}
}

7-6连续因子

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:

输入在一行中给出一个正整数 N(1)。

输出格式:

首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:

630
 

输出样例:

3
5*6*7

题解:找出最长的连续因子个数,如果n为素数,则长度为1且因子为本身;其他情况则从2开始遍历到根号n,对于每个值如果不是因子则直接跳过,是的话就直接暴力找连续因子,选择最长的长度,用long long 类型

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{
long long n;
scanf("%lld",&n);
int k=0;
ll num=0,st;//连续最长因子的个数,开始时的因子
for(ll i=2;i<=sqrt(n);i++)
{
if(n%i!=0)
{
continue;
}
ll j=i;
ll t=n;
ll ct=0;
while(t%j==0)
{
t/=j;
ct++;
j++;
}
if(num<ct)
{
num=ct;
st=i;
}
}
if(num==0)//当n为素数时
{
cout<<"1"<<endl;
cout<<n<<endl;
}
else
{
cout<<num<<endl;
for(ll i=0;i<num;i++)
{
if(i!=num-1)cout<<st+i<<"*";
else cout<<st+i<<endl;
}
}
}

7-10人以群分

社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的)。要求两类人群的规模尽可能接近,而他们的总活跃度差距尽可能拉开。

输入格式:

输入第一行给出一个正整数N(2)。随后一行给出N个正整数,分别是每个人的活跃度,其间以空格分隔。题目保证这些数字以及它们的和都不会超过2​31​​。

输出格式:

按下列格式输出:

Outgoing #: N1
Introverted #: N2
Diff = N3
 

其中N1是外向型人的个数;N2是内向型人的个数;N3是两群人总活跃度之差的绝对值。

输入样例1:

10
23 8 10 99 46 2333 46 1 666 555
 

输出样例1:

Outgoing #: 5
Introverted #: 5
Diff = 3611
 

输入样例2:

13
110 79 218 69 3721 100 29 135 2 6 13 5188 85
 

输出样例2:

Outgoing #: 7
Introverted #: 6
Diff = 9359

题解:第一队为外向型,第二队为内向型,因为要求两类人的数目尽可能接近,而活跃度差距尽可能要大,所以当数目为偶数时两队人数各一半,奇数时第一队比第二队多一人即可,将活跃度从小到大排列,将小的存入人数少的一队直到人满,剩下的存入另一队即可

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int s[n+5];
int i,j,ct=0,st=0,num=0;
for(i=0;i<n;i++)cin>>s[i];
sort(s,s+n);
if(n%2==0)
{
for(i=0;i<n/2;i++)ct+=s[i];
for(i=n/2;i<n;i++)st+=s[i];
num=abs(ct-st);
cout<<"Outgoing #: "<<n/2<<endl;
cout<<"Introverted #: "<<n/2<<endl;
cout<<"Diff = "<<num<<endl;
}
else
{
for(i=0;i<n/2;i++)
{
ct+=s[i];
}
for(i=n/2;i<n;i++)st+=s[i];
num=abs(ct-st);
cout<<"Outgoing #: "<<n/2+1<<endl;
cout<<"Introverted #: "<<n/2<<endl;
cout<<"Diff = "<<num<<endl;
}
}

7-12功夫传人

一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹、挖到了特别的秘笈),会将功夫的威力一下子放大N倍 —— 我们称这种弟子为“得道者”。

这里我们来考察某一位祖师爷门下的徒子徒孙家谱:假设家谱中的每个人只有1位师傅(除了祖师爷没有师傅);每位师傅可以带很多徒弟;并且假设辈分严格有序,即祖师爷这门武功的每个第i代传人只能在第i-1代传人中拜1个师傅。我们假设已知祖师爷的功力值为Z,每向下传承一代,就会减弱r%,除非某一代弟子得道。现给出师门谱系关系,要求你算出所有得道者的功力总值。

输入格式:

输入在第一行给出3个正整数,分别是:N(≤)——整个师门的总人数(于是每个人从0到N−1编号,祖师爷的编号为0);Z——祖师爷的功力值(不一定是整数,但起码是正数);r ——每传一代功夫所打的折扣百分比值(不超过100的正数)。接下来有N行,第i行(,)描述编号为i的人所传的徒弟,格式为:

K​i​​ ID[1] ID[2] ⋯ ID[K​i​​]

其中K​i​​是徒弟的个数,后面跟的是各位徒弟的编号,数字间以空格间隔。K​i​​为零表示这是一位得道者,这时后面跟的一个数字表示其武功被放大的倍数。

输出格式:

在一行中输出所有得道者的功力总值,只保留其整数部分。题目保证输入和正确的输出都不超过1。

输入样例:

10 18.0 1.00
3 2 3 5
1 9
1 4
1 7
0 7
2 6 1
1 8
0 9
0 4
0 3
 

输出样例:

404
题意:给出老祖宗的功力,每向下传给一代徒弟,功力会减少r%,0是老祖宗的徒弟,其中得道者的功力会增加n倍,求得道者的功力
题解:用结构体存入每一位师傅的功力,用结构体中的vector数组来存其徒弟,当为得道者时,功力扩大n倍,否则就直接传承功力即可
注意点:老祖宗也是得道者,需要加上老祖宗的n倍功力。

#include<bits/stdc++.h>
#include<vector>
using namespace std;
typedef long long ll;
const int maxn=1e5+100;
int n,i,j,k,w;
double z,r;
struct person
{
double gf;
vector<int>tudi;
}s[maxn];
ll getsum()
{
double sum=0;
queue<int> q;
s[0].gf=z;
q.push(0);
while(!q.empty())
{
int n=q.front();
q.pop();
for(int i=0;i<s[now].tudi.size();i++)
{
int t=s[now].tudi[i];
if(s[t].gf!=0)sum+=s[t].gf*s[now].gf*r;
else s[t].gf=s[now].gf*r;
q.push(t);
}
}
return sum;
}
int main()
{
cin>>n>>z>>r;
r=(100-r)/100;
for(int i=0;i<n;i++)
{
cin>>k;
if(k==0)
{
cin>>s[i].gf;
}
while(k--)
{
cin>>w;
s[i].tudi.push_back(w);
}
}
if(s[0].gf!=0)
{
printf("%lld\n",s[0].gf*z); }
else
{
printf("%lld\n",getsum());
}
}
 

2020.11.1--pta阶梯练习赛补题的更多相关文章

  1. 2020.11.14-pta天梯练习赛补题

    7-7 矩阵A乘以B 给定两个矩阵A和B,要求你计算它们的乘积矩阵AB.需要注意的是,只有规模匹配的矩阵才可以相乘.即若A有R​a​​行.C​a​​列,B有R​b​​行.C​b​​列,则只有C​a​​ ...

  2. 2020.10.17-pta天梯练习赛补题

    7-5敲笨钟 微博上有个自称"大笨钟V"的家伙,每天敲钟催促码农们爱惜身体早点睡觉.为了增加敲钟的趣味性,还会糟改几句古诗词.其糟改的方法为:去网上搜寻压"ong&quo ...

  3. 【补题记录】ZJU-ICPC Summer Training 2020 部分补题记录

    补题地址:https://zjusummer.contest.codeforces.com/ Contents ZJU-ICPC Summer 2020 Contest 1 by Group A Pr ...

  4. 2020.12.20vj补题

    A - Insomnia cure 题意:一共s只龙,每隔k,l,m,n只龙就会受伤,问这s只龙有多少龙是受伤的 思路:看起来题目范围并不是很多,直接进行循环判断 代码: 1 #include< ...

  5. 【JOISC 2020 补题记录】

    目录 Day 1 Building 4 Hamburg Steak Sweeping Day 2 Chameleon's Love Making Friends on Joitter is Fun R ...

  6. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  7. ICPC南京补题

    由于缺的题目比较多,竟然高达3题,所以再写一篇补题的博客 Lpl and Energy-saving Lamps During tea-drinking, princess, amongst othe ...

  8. 2018 CCPC 桂林站(upc复现赛)补题

    2018 CCPC 桂林站(upc复现赛)补题 G.Greatest Common Divisor(思维) 求相邻数的差值的gcd,对gcd分解素因子,对所有的素因子做一次遍历,找出最小答案. 几个样 ...

  9. 【2020.11.28提高组模拟】T1染色(color)

    [2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...

随机推荐

  1. 利用sql语句复制一条或多条记录

    sql 复制记录insert into article (id,class,title,content) select id,'2',title,content from article where ...

  2. 用CUDA写出比Numpy更快的规约求和函数

    技术背景 在前面的几篇博客中我们介绍了在Python中使用Numba来写CUDA程序的一些基本操作和方法,并且展示了GPU加速的实际效果.在可并行化的算法中,比如计算两个矢量的加和,或者是在分子动力学 ...

  3. vue + WangEnduit

    components 注册组件 <template lang="html"> <div class="editor"> <div ...

  4. 窗口函数至排序——SQLServer2012可高用

    常用到的窗口函数 工作中要常对数据进行分析,分析前要对原始数据中找到想要的格式,数据原本存储的格式不一定时我们想要的,要在基础上进行一定的处理,下面介绍的几种方式是常用的数据排序的集中方式,包含 排名 ...

  5. Linux常用命令 - head命令详解

    21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 显示文 ...

  6. Java链表练习题小结

    链表 链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).一个链表节点至少包含一个 数据域和 ...

  7. Anaconda配置国内镜像源

    1. 为conda配置(清华)镜像源 使用conda进行安装时,访问的是国外的网络,所以下载和安装包时会特别慢.我们需要更换到国内镜像源地址,这里我更换到国内的清华大学地址.(永久添加镜像) Wind ...

  8. ESP8266- 使用AT指令获取网络时间

    前言:很早就考虑过用 ESP8266 获取网络时间,以前都是用 ESP8266 刷机智云的 Gagent 固件,但无奈现在手头的 ESP-01 的 Flash 只有 1M,实在无法胜任.经过在网络上的 ...

  9. PHP中使用PDO操作事务的一些小测试

    关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...

  10. PHP设计模式之命令模式

    命令模式,也称为动作或者事务模式,很多教材会用饭馆来举例.作为顾客的我们是命令的下达者,服务员是这个命令的接收者,菜单是这个实际的命令,而厨师是这个命令的执行者.那么,这个模式解决了什么呢?当你要修改 ...