目录
L2-014 列车调度 - 二分+贪心
1、java版 - 运行超时
2、c++版
L1-010 比较大小 - 10
L1-015 跟奥巴马一起画方块 - 15
L1-009 N个数求和 - 20
java 欧几里得求最大公约数gcd
L2-014 列车调度 - 二分+贪心
PTA | 程序设计类实验辅助教学平台
如果当前序号比火车队列末尾中最小的还要大,就需要重开轨道
1、java版 - 运行超时
这个java代码思路是对的,但在pta上面运行超时,我觉得可能是java本身输入输出比较慢
运用了排序set 也就是TreeSet
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
TreeSet<Integer> s=new TreeSet<>();
s.add(-1);
for(int i=1;i<=n;i++)
{
int x=sc.nextInt();
if(x<s.last()) s.remove(s.higher(x));
s.add(x);
}
System.out.println(s.size()-1);
}
}
2、c++版
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
set<int>s;
s.insert(-1);
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
//set的最后一个值s.rbegin()
if(x<*s.rbegin())
//s.upper_bound(t)返回的是第一个大于t的迭代器的位置
s.erase(*s.upper_bound(x));//删除第一个比x大的
s.insert(x);//插入x
}
cout<<s.size()-1;//因为先插入了-1 所以答案减一
return 0;
}
L1-010 比较大小 - 10
PTA | 程序设计类实验辅助教学平台
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int[] a=new int[3];
for(int i=0;i<3;i++) a[i]=sc.nextInt();
Arrays.sort(a);
for(int i=0;i<3;i++)
{
if(i!=0) System.out.print("->");
System.out.print(a[i]);
}
}
}
L1-015 跟奥巴马一起画方块 - 15
PTA | 程序设计类实验辅助教学平台
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String s=sc.next();
int t= n%2==0? n/2:n/2+1;
for(int i=0;i<t;i++)
{
for(int j=0;j<n;j++)
System.out.print(s);
System.out.println();
}
}
}
L1-009 N个数求和 - 20
PTA | 程序设计类实验辅助教学平台
java 欧几里得求最大公约数gcd
static int gcd(int a,int b) { return b!=0?gcd(b,a%b):a; }
import java.util.*;
public class Main
{
static int gcd(int a,int b)
{
return b!=0?gcd(b,a%b):a;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[][] p=new int[n][2];
for(int i=0;i<n;i++)
{
String s=sc.next();
String[] num=s.split("/");
p[i][0]=Integer.parseInt(num[0]);
p[i][1]=Integer.parseInt(num[1]);
}
int fenzi=0,fenmu=1; //初始化分数0/1
for(int i=0;i<n;i++)
{
fenzi*=p[i][1];
p[i][0]*=fenmu;
fenzi+=p[i][0];
fenmu*=p[i][1];
int g=gcd(fenzi,fenmu);
fenzi/=g;
fenmu/=g;
}
if(fenzi%fenmu==0) System.out.print(fenzi/fenmu);
else if(fenzi<fenmu) System.out.print(fenzi+"/"+fenmu);
else System.out.print(fenzi/fenmu+" "+fenzi%fenmu+"/"+fenmu);
}
}