本文共 6294 字,大约阅读时间需要 20 分钟。
题目描述
输入
输出
样例输入 Copy
3LRR
样例输出 Copy
E
链接:
import java.util.Scanner;public class Main { public static void direction(int count_L,int count_R){ //左转的次数可以和右转的次数抵消,剩下的都是左转或者右转 int real = Math.abs(count_L-count_R);//剩下的 int temp = count_L > count_R ? 2:0; if(real%4==0) System.out.println("N"); else if(real%4==1+temp) System.out.println("E"); else if(real%4==2) System.out.println("S"); else if(real%4==3-temp) System.out.println("W"); } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt(); String str = sc.next(); int count_L = 0; int count_R = 0; for(int i=0;i
题目描述
输入
输出
样例输入 Copy
10 42 34 54 85 8
样例输出 Copy
7
链接:(嗯,就是并查集的代码)
import java.util.Scanner;public class Main { private static int[] parent = new int[200]; private static int[] rank = new int[200]; public static int count; public static void init(int x){ //初始化每个集合(树),将每个元素作为一个集合 parent[x] = x; rank[x] = 1; } public static int find_set(int x){ //路径压缩,递归的将每个节点的根节点指向整棵树的根节点 if(parent[x]!=x) return find_set(parent[x]); return parent[x]; } public static void union_set(int x,int y){ int a = find_set(x); int b = find_set(y); if(a==b) //如果相等就代表在同一棵树,在同一个集合 return; count--;//集合的个数少1 if(rank[a]<=rank[b]){ //如果a的秩小于等于b的秩,则将a合并到b parent[a] = b; if(rank[a]==rank[b])//如果a,b的秩相等,则需要将b的秩加一 rank[b]++; } else parent[b] = a;//如果b的秩小于a的秩,则将b合并到a } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt();//住着n个人 int m = sc.nextInt();//m条信息 for(int i=1;i<=n;i++) init(i); count = n; for(int i=0;i
题目描述
如果实施更为严格的防控措施,一辆汽车上有一个确诊患者或者密切接触者,那么该汽车上所有的人都被认为是密切接触者,全部需要自行居家隔离或者集中隔离14天。
现在假定编号为0的乘客冠状病毒核酸检验呈阳性,请编写一个程序统计需隔离的总人数(包括编号为0的乘客)。
输入
输出
样例输入 Copy
100 42 1 25 10 13 11 12 142 0 12 99 2
样例输出 Copy
4
链接:
import java.util.Scanner;public class Main { static int parent[] = new int[10000];//存放父节点 static int rank[] = new int[10000];//存放秩 static int count; public static void init(int x){ //初始化每个集合(树),将每个元素作为一个集合 parent[x] = x; rank[x] = 0; } public static int find_set(int x){ //路径压缩,递归的将每个节点的根节点指向整棵树的根节点 if(parent[x]!=x) parent[x] = find_set(parent[x]); return parent[x]; } public static void union_set(int x,int y){ int a = find_set(x); int b = find_set(y); if(a==b) //如果相等就代表在同一棵树,在同一个集合 return; if(rank[a]<=rank[b]){ //如果a的秩小于等于b的秩,则将a合并到b parent[a] = b; if(rank[a]==rank[b])//如果a,b的秩相等,则需要将b的秩加一 rank[b]++; } else parent[b] = a;//如果b的秩小于a的秩,则将b合并到a } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt();//总人数 int m = sc.nextInt();//汽车数量 for(int i=0;i<=n;i++) init(i);//初始化,i<=0,避免为0时不能初始化 for(int i=0;i
题目描述
输入
输出
样例输入 Copy
3 30 1 100 2 151 2 50
样例输出 Copy
25
链接:
#include#define ll long longconst int N=1005;using namespace std;int p[N];//用来存放每个点的父节点int ran[N];//用来存放秩,用来优化,减少树的高度double sm;//用来存放结果,权重typedef struct{ //定义每条边 int x,y; double v;}Node;Node node[N];bool cmp(Node& a,Node& b){ //升序 return a.v ran[b]){ p[b]=a; sm+=v; }else{ p[a]=b; sm+=v; if(ran[a]==ran[b]) ran[b]++; } return true;}int main(){ int n, m; while(cin>>n>>m){ sm=0; for(int i=0;i >node[i].x>>node[i].y>>node[i].v; } sort(node,node+m,cmp);//排序 for(int j=0;j
Description
Input
每组输入数据包含m+1行。 第1行输入两个正整数n和m,其中n表示电子元件数量(n<=100),m表示提供了m对电子元件之间的奖励积分值(m<=1000)。两个正整数之间用空格隔开。
第2行到第m+1行对应m对电子元件及其对应的奖励积分值,每一行包含三个正整数,第1个和第2个整数表示电子元件编号(从1开始),第3个整数表示两个元件之间搭建电路的奖励积分num(num<1e9)。整数之间用空格隔开。
Output
Sample Input Copy
3 31 2 101 3 202 3 30
Sample Output Copy
50
#include#define ll long longusing namespace std; const int MAXN=1010;int fa[MAXN];int ra[MAXN];ll ans; struct Edge{ int x; int y; int cost;}; int cmp(const Edge &x,const Edge &y){ return x.cost>y.cost;} int find_set(int x){ if(x!=fa[x]){ fa[x]=find_set(fa[x]); } return fa[x];} void union_set(int x,int y,int cost){ x=find_set(x); y=find_set(y); if(x!=y) ans+=cost; if(ra[x]>ra[y]) fa[y]=x; else{ fa[x]=y; if(ra[x]==ra[y]){ ra[y]++; } }} int main(){ int n,m; while(cin>>n>>m){ Edge es[MAXN]; memset(fa,0,sizeof(fa)); memset(ra,0,sizeof(ra)); for(int i=1;i >es[i].x>>es[i].y>>es[i].cost; } sort(es,es+m,cmp); ans=0; if(m>=n-1){ for(int i=0;i
题目描述
输入
输出
样例输入 Copy
5 70 1 100 3 300 4 1001 2 502 4 103 2 203 4 60
样例输出 Copy
0 10 50 30 60
链接 :
import java.util.Scanner;public class Main { public static void dijkstra(int[][] G,int[] dist){ int n = dist.length; boolean[] s = new boolean[n];//标记顶点放入或不放入 //初始化点0到各个定点的初始距离 for(int i=1;i< n;i++){ //共扫描n-1次 int min = 1000000; //寻找距离点0最近的点 for(int j=0;j
【今天和室友们浅谈了一下未来的规划,感觉未来挺迷茫的,但是周一还是要继续干学习呀!】
“我的图能不能尽量不修,如果非修的话,能不能别把我的皱纹都给我修平了,那可是我好不容易长出来的,年龄不是我的敌人,我的故事写在我的脸上,而这张脸就是对时间,对真实的致敬”
转载地址:http://rycki.baihongyu.com/