内存限制:128 MB时间限制:2.000 S
评测方式:文本比较命题人:dsadmin
提交:894解决:544
返回比赛提交提交记录侧边提交
题目描述
有一种生物A,一天就能长大,长大的A每过一天就能生一个小A(刚长大的A会从下一天开始生小A),小A过一天后也会长大。。。以此往复。现在,我们有一个刚出生的小A,问n天后共有多少个长大的生物A
输入
输入仅一行,包含一个自然数 n,0<=n<=46.
输出
长大的A的个数
样例输入 复制
5
样例输出 复制
5
提示
sample 2
0
0
#include
using namespace std;
#define INF 0x3f3f3f
#define ll long long
#define int long long
#define MAX_SIZE 1005
int a[50];
signed main(){
int n;cin>>n;
a[0]=0;
a[1]=1;
a[2]=1;
for(int i=3;i<=n;i++){
a[i]=a[i-1]+a[i-2];
}
cout<
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:dsadmin
提交:545解决:488
返回比赛提交提交记录侧边提交
题目描述
同一平面内有 n(n≤500)条直线,已知其中 p(p≥2)条直线相交于同一点,则这 n 条直线最多能将 平面分割成多少个不同的区域?
输入
两个整数 n(n≤500)和 p(2≤p≤n)。
输出
一个正整数,代表最多分割成的区域数目。
样例输入 复制
12 5
样例输出 复制
73
#include
using namespace std;
#define INF 0x3f3f3f
#define ll long long
#define int long long
#define MAX_SIZE 505
int a[MAX_SIZE];
signed main(){
int m,n;cin>>n>>m;
a[m]=m*2;
for(int i=m+1;i<=n;i++){
a[i]=a[i-1]+i;
}
cout<
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:jixun2019
提交:933解决:391
返回比赛提交提交记录侧边提交
题目描述
给出有 n 个元素的由小到大的序列,请你编程找出某元素第一次出现的位置。(n<=10^6)
输入
第一行:一个整数,表示由小到大序列元素个数;下面 n 行,每行一个整数;最后一行 一个整数 x,表示待查找的元素;
输出
如果 x 在序列中,则输出 x 第一次出现的位置,否则输出-1。
样例输入 复制
5
3
5
6
6
7
6
样例输出 复制
3
#include
using namespace std;
#define INF 0x3f3f3f
#define ll long long
#define int long long
#define MAX_SIZE 1000005
int a[MAX_SIZE];
signed main(){
int n;cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int x;cin>>x;
int l=1,r=n;
while(l+1=x)
r=mid;
else
l=mid;
}
if(a[l]==x) cout<
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:jixun2019
提交:1060解决:358
返回比赛提交提交记录侧边提交
题目描述
给定一个序列 a1,a2,…,an,如果存在 i
输入
第一行为 n,表示序列长度,接下来的 n 行,第 i+1 行表示序列中的第 i 个数。
输出
所有逆序对总数。
样例输入 复制
4
3
2
3
2
样例输出 复制
3
提示
N<=10^5,Ai<=10^5
#include
using namespace std;
#define INF 0x3f3f3f
#define ll long long
#define int long long
#define MAX_SIZE 100005
int a[MAX_SIZE];
int b[MAX_SIZE];
int ans=0;
void func(int l,int r){
if(l==r) return;
int mid=(l+r)/2;
func(l,mid);
func(mid+1,r);
int i=l,j=mid+1,k=l;
while(i<=mid&&j<=r){
if(a[i]<=a[j]){
b[k]=a[i];
i++;k++;
}
else{
b[k]=a[j];
j++;k++;
ans+=mid-i+1;
}
}
while(i<=mid){
b[k]=a[i];
k++;i++;
}
while(j<=r){
b[k]=a[j];
k++;j++;
}
for(int t=l;t<=r;t++){
a[t]=b[t];
}
}
signed main(){
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
func(1,n);
cout<
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:外部导入
提交:2401解决:953
返回比赛提交提交记录侧边提交
题目描述
某个系统中有一个设备,该设备每次只能分配给一个任务使用,且只有当任务结束后才能再分配给另一个任务使用。 假设系统启动时间计为时间0点,预先有一份任务计划表,预定了每个任务的开始时间点和持续时间。 要求设计算法统计出该设备最多能够满足任务计划表中的多少个任务的使用请求。
输入
输入的第一行为一个整数m,表示要计算的用例的个数。 从第二行开始是m个测试用例的输入数据。 每个测试用例的第一行为一个整数n,表示任务计划表中的任务个数,n≤1000。 每个测试用例的第二行为2*n个整数,分别为每个任务的开始时间点和持续时间,整数之间用空格隔开。
输出
要求对每个测试用例输出一行结果,输出结果为该测试用例下,能够满足的最大任务数。
样例输入 复制
1
11
12 2 2 11 8 4 8 3 6 4 5 4 3 5 5 2 0 6 3 2 1 3
样例输出 复制
4
结束最早的
#include
using namespace std;
#define INF 0x3f3f3f
#define ll long long
#define int long long
#define MAX_SIZE 1005
typedef struct{
int start;
int end;
}mm;
mm m[MAX_SIZE];
bool cmp(mm a,mm b){
return a.end>t;
while(t--){
int ans=0;
int n;cin>>n;
for(int i=0;i>m[i].start>>m[i].end;
m[i].end+=m[i].start;
}
sort(m,m+n,cmp);
int temp=0;
for(int i=0;i
内存限制:128 MB时间限制:3.000 S
评测方式:文本比较命题人:外部导入
提交:415解决:150
返回比赛提交提交记录侧边提交
题目描述
请设计算法找出一个整数序列中最长单调递增子序列的长度。
输入
第一行为测试用例个数n,0<n≤1000。 第二行开始,每行为一个测试用例。每个测试用例由一组空格间隔的整数组成,第一个整数m为序列的长度,后面m个整数为序列内容,0<m≤1000。0≤ai≤1000
输出
对每个测试用例,输出其最长单调递增子序列的长度,每个输出占一行。
样例输入 复制
2
5 1 3 2 4 5
6 3 2 4 5 3 2
样例输出 复制
4
3
#include
using namespace std;
#define INF 0x3f3f3f
#define ll long long
#define int long long
#define MAX_SIZE 1005
int a[MAX_SIZE];
int dp[MAX_SIZE];
signed main(){
int t;cin>>t;
while(t--){
int n;cin>>n;
memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
cin>>a[i];
dp[i]++; //设初值为1:至少本身
}
int ans=0;
for(int i=2;i<=n;i++){
for(int j=1;j<=i-1;j++){
if(a[j]ans){
ans=dp[i];
}
}
}
//这里不是dp[n]!!假如a[n]=0,就是最小的
cout<