zoukankan      html  css  js  c++  java
  • NCST 20182019秋季学期17级个人排位赛(一)

    参考题解Reference Solution



    A:PUBG

    Time Limit:2.000 Sec Memory Limit:128 MiB

    Description

    喜欢ACM的大一新生FYX同学沉迷吃鸡,这一天,他又开始了一局刺激的吃鸡游戏,经过一番搜寻,一级套的FYX同学准备驱车前往安全区。

    FYX深知地图中一定会埋伏许多LYB,FYX希望你能够帮他找到一条到达安全区的安全路线,不要遇到LYB。

    Input

    第一行为一个整数\(n\),代表地图的大小\((n\times n)\)

    接下来的\(n\)行中,每行包含\(n\)个整数\(a\)\(a=0\)表示当前位置可以安全通行,\(a=1\)表示当前位置有LYB。\(a=3\)代表FYX的当前位置,\(a=4\)代表安全区。

    规定:\(1 < n \leqslant 100\)

    Output

    输出到达安全路线的最短步数。



    Sample Input

    5
    1 1 0 1 1
    3 0 1 1 1
    0 0 0 1 1
    1 0 1 4 1
    0 0 0 0 0
    



    Sample Output

    7
    



    PZ's Solution

    1.BFS的模板题,不过这里实际上有一个很有意思的结论:

    2.设一个图\(G\)的所有的边的边权为\(1\),那么从某点开始的单源最短路可以直接通过BFS求出;

    • TAG:BFS广度优先搜索



    PZ.cpp

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    using namespace std;
    queue<int>qx,qy;
    int n,ex,ey,sx,sy,a[105][105],dis[105][105];
    bool vis[105][105];
    int fx[]={0,0,1,-1};
    int fy[]={1,-1,0,0};
    void bfs(){
    	qx.push(sx); qy.push(sy); vis[sx][sy]=1;
    	while(!qx.empty()){
    		int x=qx.front(),y=qy.front();
    		qx.pop(); qy.pop();
    		for(int i=0;i<4;++i){
    			int nx=x+fx[i],ny=y+fy[i];
    			if(nx<1||n<nx||ny<1||n<ny||vis[nx][ny]||a[nx][ny]==1) continue;
    			dis[nx][ny]=dis[x][y]+1;
    			if(nx==ex&&ny==ey) break;
    			vis[nx][ny]=1;
    			qx.push(nx); qy.push(ny);
    		}
    	}
    }
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    		for(int j=1;j<=n;++j){
    			scanf("%d",&a[i][j]);
    			if(a[i][j]==3){ sx=i,sy=j; }
    			if(a[i][j]==4){ ex=i,ey=j; }
    		}
    	bfs();		
    	printf("%d",dis[ex][ey]);
    	return 0;
    }
    






    B:fzc的爱好

    Time Limit:2.000 Sec Memory Limit:128 MiB

    Description

    喜欢ACM的大一新生fzc同学来到了大学之后发现自己宿舍的同学各不相同;

    有的同学喜欢玩游戏;有的同学喜欢打篮球;有的喜欢和班级的男同学谈理想;有的同学喜欢和班级的女同学谈人生。

    fzc也有自己独特的爱好,他喜欢判断一个仅由\(a、b、c、d、e\)组成的字符串中字符出现最多的次数。

    Input

    一个由 \(5\) 个英文字符 \(abcde\) 组成的字符串(\(1 \leqslant\) 字符串长度\(\leqslant 50\))。

    Output

    字符串中字符出现最多的次数。



    Sample Input

    aaabbc
    



    Sample Output

    3
    



    PZ's Solution

    1.本题题意为输出 出现最多的 字符 的 出现次数;

    2.因为只会出现\(a、b、c、d、e\)这几种字符,直接记录并排序即可;

    • TAG:字符串



    PZ.cpp

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    string s;
    int vis[10];
    int main(){
    	cin>>s;
    	for(int i=0;i<s.size();++i)
    		vis[s[i]-'a']++;
    	sort(vis,vis+5);
    	printf("%d",vis[4]);
    	return 0;
    }
    






    C:Math Function

    Time Limit:2.000 Sec Memory Limit:128 MiB

    Description

    喜欢ACM的大一新生FYX同学遇到了一道高数题,已知底数\(n\),要求算出\(a=n^π\)的结果(\(π\)\(3.1415926\))。

    FYX觉得这很简单,但是题目又要求结果保留小数点后\(x\)位,这样他就不会了。学长学姐能帮帮他嘛?

    Input

    第一行一个整数\(M\),表示测试实例的个数;

    后面\(M\)行输入数据,每行包含两个正整数\(n\)\(x\),分别表示底数与要保留的小数点后的位数。

    规定:\(1 \leqslant M \leqslant 50, 1 \leqslant n \leqslant 100 , 1 \leqslant x \leqslant 5\)

    Output

    对于每组输入数据,分别输出每个测试实例的结果\(a\),每个输出占一行。



    Sample Input

    3
    1 3
    7 5
    9 1
    



    Sample Output

    1.000
    451.80783
    995.0
    



    PZ's Solution

    1.这里可以直接使用cmath库里的pow()函数,因为其本身即返回double,且要求保留的小数位数最多仅为\(5\)位;

    2.对给出的\(x\)进行分类判断,然后使用scanf()输出即可;

    • TAG:数学



    PZ.cpp

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    #define Pi 3.1415926
    int M,n,x;
    int main(){
    	scanf("%d",&M);
    	while(M--){
    		scanf("%d %d",&n,&x);
    		if(x==1) printf("%.1lf\n",pow(n,3.1415926));
    		if(x==2) printf("%.2lf\n",pow(n,3.1415926));
    		if(x==3) printf("%.3lf\n",pow(n,3.1415926));
    		if(x==4) printf("%.4lf\n",pow(n,3.1415926));
    		if(x==5) printf("%.5lf\n",pow(n,3.1415926));
    	}
    	return 0;
    }
    






    D:学姐的神秘卡片

    Time Limit:2.000 Sec Memory Limit:128 MiB

    Description

    喜欢ACM的大一新生FYX今天很无聊,他发现自己的桌子上有学姐留下的四张神秘卡片:

    每张卡片上都有一个数字(数字可能相同),他发现用这四张卡片可以排成很多不同的4位数。

    FYX希望可以按从小到大的顺序输出这些4位数,你可以和他一起完成这个任务嘛?

    Input

    四个整数,分别表示四张卡片上的数字(\(1 \leqslant\) 数字 \(\leqslant 9\))。

    Output

    对每组卡片排列的结果按升序输出全排列,每两个输出结果之间用空格隔开。



    Sample Input

    1 1 2 3
    



    Sample Output

    1123 1132 1213 1231 1312 1321 2113 2131 2311 3112 3121 3211
    



    PZ's Solution

    1.简单的深搜模板,不过值得注意的是,由于数字可能相同,所以拼凑出来的数也可能相同;

    2.而这些拼凑出来相同的数,应视为只有一个数(简单来说,就是输出不能重复);

    • TAG:DFS深度优先搜索



    PZ.cpp

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int a[5];
    bool vis[5],f[10000];
    void dfs(int x,int res){
    	if(x==5){
    		if(!f[res]) f[res]=1,printf("%d ",res);
    		return;
    	}
    	for(int i=1;i<=4;++i)
    		if(!vis[i]){
    			vis[i]=1;
    			dfs(x+1,res*10+a[i]);
    			vis[i]=0;
    		}
    }
    int main(){
    	for(int i=1;i<=4;++i) scanf("%d",&a[i]);
    	sort(a+1,a+1+4);
    	dfs(1,0);
    	return 0;
    }
    






    E:跳蚤市场

    Time Limit:2.000 Sec Memory Limit:128 MiB

    Description

    喜欢ACM的大一新生FYX同学来到了大学一年一度的跳蚤市场,FYX这个月已经没有生活费了,于是他拿着两本《C语言程序设计教程》,准备把它们卖了。

    跳蚤市场里有很多认识FYX的学姐,每位学姐见到FYX都愿意送给他一些程序设计书。

    FYX没想到的是,有许多同样喜欢ACM的新生,看到自己手中的程序设计书都特别眼红。FYX菩萨心肠,慈悲为怀,愿意把自己所有的书(包括学姐送的书)卖给其他的新生同学。

    这一路上,FYX一共遇到学姐们\(5\)次,每一次学姐们都会送给FYX与他当前时刻手中同样数量的书;一共遇到新生们\(10\)次,每一次都会卖一本书。已知FYX最后一次遇见一位新生,正好把手中的书卖完。

    可以把遇到学姐记为\(1\),遇到新生记为\(2\)。则\(212112212212222\),就是合理的次序,\(121222221212122\)也是合理的次序。像这样的次序一共有多少种呢?

    Input

    没有输入

    Output

    输出一个整数,为次序的总数。



    PZ's Solution

    1.一道提交答案题,不过题面意思很明确;

    2.考虑使用搜索,要注意几个条件:

    1).不论是遇到学姐还是遇到新生,手里必须要剩下书,不然学姐给不了你书,你也卖不给新生书;
    2).注意 FYX最后依此遇见一位新生,正好把手中的书卖完,这是累加答案的依据;

    • TAG:DFS深度优先搜索;递归



    PZ.cpp

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int ans;
    void dfs(int X,int Y,int Book,int C){
    	if(X<0||Y<0) return;
    	if(C==1&&X==0&&Y==0&&Book==0){
    		++ans;
    		return;
    	}
    	if(Book<=0) return;
    	dfs(X-1,Y,Book*2,0);
    	dfs(X,Y-1,Book-1,1);
    }
    int main(){
    	dfs(5,10,2,-1);
    	printf("%d",ans);
    	return 0;
    }
    
  • 相关阅读:
    莫队专题
    AJAX XML 实例
    AJAX 简介
    AJAX 服务器响应
    AJAX 创建XMLHttpRequest 对象
    AJAX 教程
    AJAX 向服务器发送请求
    AJAX onreadystatechange 事件
    AJAX ASP/PHP 请求实例
    让卖场的死角“起死回生”
  • 原文地址:https://www.cnblogs.com/Potrem/p/NCST_2018_2019_1.html
Copyright © 2011-2022 走看看