- 点击跳转专栏=>Unity3D特效百例
- 点击跳转专栏=>案例项目实战源码
- 点击跳转专栏=>游戏脚本-辅助自动化
- 点击跳转专栏=>Android控件全解手册
- 点击跳转专栏=>Scratch编程案例
- 点击跳转=>软考全系列
- 点击跳转=>蓝桥系列
👉关于作者
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单。
👉实践过程
需要所有整理的文档可底部卡片联系我,直接发压缩包。
😜危险系数
问题描述
抗日战争时期,冀中平原的地道战曾发挥重要作用。
地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。
我们来定义一个危险系数DF(x,y):
对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个数。
本题的任务是:已知网络结构,求两站点之间的危险系数。
输入格式
输入数据第一行包含2个整数n(2 <= n <= 1000), m(0 <= m <= 2000),分别代表站点数,通道数;
接下来m行,每行两个整数 u,v (1 <= u, v <= n; u != v)代表一条通道;
最后1行,两个数u,v,代表询问两点之间的危险系数DF(u, v)。
输出格式
一个整数,如果询问的两点不连通则输出-1.
样例输入
7 6
1 3
2 3
3 4
3 5
4 5
5 6
1 6
样例输出
2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;public class Main {static int n,m;public static void main(String[] args) throws IOException {BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));StringTokenizer tok=new StringTokenizer(bfr.readLine());
// long begin=System.currentTimeMillis();n=Integer.parseInt(tok.nextToken());m=Integer.parseInt(tok.nextToken());ArrayList<Integer>[] way=new ArrayList[n];int count=0;int i;for(i=0;i<n;i++) way[i]=new ArrayList<Integer>();for(i=0;i<m;i++){tok=new StringTokenizer(bfr.readLine());int x=Integer.parseInt(tok.nextToken())-1, y=Integer.parseInt(tok.nextToken())-1;way[x].add(y); way[y].add(x);}tok=new StringTokenizer(bfr.readLine());int g1=Integer.parseInt(tok.nextToken())-1, g2=Integer.parseInt(tok.nextToken())-1;for(i=0;i<n;i++){if(i==g1 || i==g2) continue;boolean[] flag=new boolean[n];int[] que=new int [n];int front=0,rear=1;que[0]=g1;while(front<rear){for(int p=0;p<way[que[front]].size();p++){if(way[que[front]].get(p)==i) continue;if (!flag[way[que[front]].get(p)]){que[rear] = way[que[front]].get(p);flag[que[rear]]=true;if(que[rear]==g2) break;rear++;}}if(flag[g2]) { count++; break; }front++;}}System.out.println(n-2-count);
// System.out.println(System.currentTimeMillis()-begin);}
}
😜网络寻路
问题描述
X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径。
源地址和目标地址可以相同,但中间节点必须不同。
如下图所示的网络。
1 -> 2 -> 3 -> 1 是允许的
1 -> 2 -> 1 -> 2 或者 1 -> 2 -> 3 -> 2 都是非法的。
输入格式
输入数据的第一行为两个整数N M,分别表示节点个数和连接线路的条数(1<=N<=10000; 0<=M<=100000)。
接下去有M行,每行为两个整数 u 和 v,表示节点u 和 v 联通(1<=u,v<=N , u!=v)。
输入数据保证任意两点最多只有一条边连接,并且没有自己连自己的边,即不存在重边和自环。
输出格式
输出一个整数,表示满足要求的路径条数。
样例输入1
3 3
1 2
2 3
1 3
样例输出1
6
样例输入2
4 4
1 2
2 3
3 1
1 4
样例输出2
10
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {public static void main(String[] args) throws IOException {BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));StringTokenizer tok = new StringTokenizer(bfr.readLine());int n = Integer.parseInt(tok.nextToken());int m = Integer.parseInt(tok.nextToken());int i, count = 0;ArrayList<Integer>[] way = new ArrayList[n];for (i = 0; i < n; i++)way[i] = new ArrayList<Integer>();for (i = 0; i < m; i++) {tok = new StringTokenizer(bfr.readLine());int x = Integer.parseInt(tok.nextToken()) - 1;int y = Integer.parseInt(tok.nextToken()) - 1;way[x].add(y);way[y].add(x);}for (i = 0; i < n; i++) {int a = i, ll = way[i].size();for (int ii = 0; ii < ll; ii++) {int aa = way[a].get(ii);int lll = way[aa].size();for (int iii = 0; iii < lll; iii++) {int aaa = way[aa].get(iii);if (aaa == a)continue;count += way[aaa].size();count--;}}}System.out.println(count);}
}
😜高僧斗法
问题描述
古时丧葬活动中经常请高僧做法事。仪式结束后,有时会有“高僧斗法”的趣味节目,以舒缓压抑的气氛。
节目大略步骤为:先用粮食(一般是稻米)在地上“画”出若干级台阶(表示N级浮屠)。又有若干小和尚随机地“站”在某个台阶上。最高一级台阶必须站人,其它任意。(如图1所示)
两位参加游戏的法师分别指挥某个小和尚向上走任意多级的台阶,但会被站在高级台阶上的小和尚阻挡,不能越过。两个小和尚也不能站在同一台阶,也不能向低级台阶移动。
两法师轮流发出指令,最后所有小和尚必然会都挤在高段台阶,再也不能向上移动。轮到哪个法师指挥时无法继续移动,则游戏结束,该法师认输。
对于已知的台阶数和小和尚的分布位置,请你计算先发指令的法师该如何决策才能保证胜出。
输入格式
输入数据为一行用空格分开的N个整数,表示小和尚的位置。台阶序号从1算起,所以最后一个小和尚的位置即是台阶的总数。(N<100, 台阶总数<1000)
输出格式
输出为一行用空格分开的两个整数: A B, 表示把A位置的小和尚移动到B位置。若有多个解,输出A值较小的解,若无解则输出-1。
样例输入
1 5 9
样例输出
1 4
样例输入
1 5 8 10
样例输出
1 3
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {public static void main(String[] args) throws IOException {BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));StringTokenizer tok= new StringTokenizer(bfr.readLine());int i=0,j,flag=1;int[] monk=new int[108];while(tok.hasMoreTokens()) monk[i++]=Integer.parseInt(tok.nextToken());int N=i-1;int[] A=new int[N];for(i=0;i<N;i++) A[i]=monk[i+1]-monk[i]-1;int sum=A[0];for(i=2;i<N;i++,i++) sum^=A[i];if(sum==0) System.out.println(-1);else{for(i=0;i<N;i++){for(j=1;j<=A[i];j++){int s=sum;A[i]-=j;if(i>0) A[i-1]+=j;if(i%2==0) { s^=(A[i]+j); s^=A[i]; }else { s^=(A[i-1]-j); s^=A[i-1]; }if(s==0) { System.out.println(monk[i]+" "+(monk[i]+j)); flag=0; break; }else { A[i]+=j; if(i>0) A[i-1]-=j; }}if(flag==0) break;}}}
}
😜约数倍数选卡片
问题描述
闲暇时,福尔摩斯和华生玩一个游戏:
在N张卡片上写有N个整数。两人轮流拿走一张卡片。要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数。例如,某次福尔摩斯拿走的卡片上写着数字“6”,则接下来华生可以拿的数字包括:
1,2,3, 6,12,18,24 …
当轮到某一方拿卡片时,没有满足要求的卡片可选,则该方为输方。
请你利用计算机的优势计算一下,在已知所有卡片上的数字和可选哪些数字的条件下,怎样选择才能保证必胜!
当选多个数字都可以必胜时,输出其中最小的数字。如果无论如何都会输,则输出-1。
输入格式
输入数据为2行。第一行是若干空格分开的整数(每个整数介于1~100间),表示当前剩余的所有卡片。
第二行也是若干空格分开的整数,表示可以选的数字。当然,第二行的数字必须完全包含在第一行的数字中。
输出格式
程序则输出必胜的招法!!
样例输入
2 3 6
3 6
样例输出
3
样例输入
1 2 2 3 3 4 5
3 4 5
样例输出
4
import java.util.Arrays;
import java.util.Scanner;
public class Main{static int[] cnt=new int[101];static int[] end=new int[101];public static boolean f(int[][] table,int x){for(int i=end[x];i>=0;i--) { int j=table[x][i]; if(cnt[j]>0){cnt[j]--; if(f(table,j)){cnt[j]++; return false;}cnt[j]++; }}return true;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);String[] s1=sc.nextLine().split(" ");String[] s2=sc.nextLine().split(" ");int[] m=new int[s2.length];int[][] table=new int[101][100];for (int i = 0; i < s1.length; i++) {int x=Integer.parseInt(s1[i]);cnt[x]++;}for (int i = 1; i < 101; i++) {if(cnt[i]>0){int t=0;for (int j = 1; j <=100; j++) {if(cnt[j]>0 && (i%j==0||j%i==0)){table[i][t]=j;t++;}}end[i]=t-1;}}for (int i = 0; i < s2.length; i++) {m[i]=Integer.parseInt(s2[i]);}Arrays.sort(m);for (int i = 0; i < m.length; i++) {cnt[m[i]]--;if(f(table,m[i])){System.out.println(m[i]);return;}cnt[m[i]]++;}System.out.println(-1);}}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。