20190919滴滴,unity

滴滴

1.

 没全A

#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=510;
int G[maxn][maxn];
bool visit[maxn];
int n,m;
void dfs(int now,int& temp){
	visit[now]=true;
	for(int i=1;i<=n;i++){
		if(visit[i]==false&&G[now][i]==1){
		   temp++;
		   dfs(i,temp);
		}
	}
}
int main(){
	//freopen("E:\\data.txt","r",stdin);
	memset(visit, false, sizeof(visit));
	fill(G[0],G[0]+maxn*maxn,1);
	scanf("%d %d", &n,&m);
	int u,v;
	for(int i=0;i<m;i++){
	   scanf("%d %d", &u,&v);
	   G[u][v]=G[v][u]=0;
	}
	vector<int> ans;
	for(int i=1;i<=n;i++){
		int temp=0;
		if(visit[i]==false){
		  dfs(i,temp);
		}
		if(temp>0){
			ans.push_back(temp);
		}
	}
	sort(ans.begin(),ans.end());
    int l=ans.size();
	int maxgar = 0;
    //maxgar = ans[l-1]/2*2;
	if(l==1){
	   maxgar = ans[l-1]/2*2;
	}else{
		if(ans[l-1]>ans[l-2]*2){
			maxgar = ans[l-1]/2*2;
		}else{
			 maxgar=ans[l-2];
		}
	}
	printf("%d\n",maxgar);
	return 0;
}

2.

没全A

n,m= map(int, input().strip().split())
arr=[]
count=[0 for i in range(m+1)]
for i in range(n):
    a,b,c=map(int, input().strip().split())
    arr.append([a,b,c])
    count[a]=count[a]+1
    count[b]=count[b]+1
arr.sort(key=lambda x:x[2],reverse=True)
jiqi=[0 for i in range(m+1)]
#print(arr)
ans=0
for i in range(n):
    if jiqi[arr[i][0]] and jiqi[arr[i][1]]:
        break;
    if jiqi[arr[i][0]]==0 and jiqi[arr[i][1]]==0:
        if count[arr[i][0]]>=count[arr[i][1]]:
            jiqi[arr[i][0]]=1
        else:
            jiqi[arr[i][1]]=1
    else:
        if jiqi[arr[i][0]]==0:
            jiqi[arr[i][0]]=1
        else:
            jiqi[arr[i][1]]=1
    ans=ans+arr[i][2]
print(ans)

unity

1.扑克牌大小

扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER。
请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。
基本规则:
(1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
(2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子);
(3)大小规则跟大家平时了解的常见规则相同,个子、对子、三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;
(4)输入的两手牌不会出现相等的情况。

输入描述:
输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如 4 4 4 4-joker JOKER。
输出描述:
输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。
示例1:
输入
4 4 4 4-joker JOKER
输出
joker JOKER

2.字符串组成

给定一个字符串A和一个字符串B,判断第一个字符串A能不能由第二个字符串B里面的字符构成。
如果可以构成, 输出YES。
否则输出NO。
输入描述:
输入为字符串A和B,以空格隔开
输出描述:
判断第一个字符串A能不能由第二个字符串B里面的字符构成,字母不能重复使用。
如果可以构成,输出YES。
如果不能构成,输出NO。
备注
A,B均由小写字母构成
示例1:
输入
aa ab
输出
NO
说明
ab无法组成aa,字母不可重复使用。
ab可组成a,b,ab。
示例2:
输入
ba cccccbbbbaaaa
输出
YES
说明
A可由B中字符组成
 

#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<set>
#include<cstring>
using namespace std;
int main(){
	string a,b;
	//a="";
	//b="";
	cin>>a>>b;
	int la=a.size();
	int lb=b.size();
	int xb[27];
	memset(xb,0,sizeof(xb));
	for(int i=0;i<lb;i++){
		xb[b[i]-'a']++;
	}
	bool flag=true;
	for(int i=0;i<la;i++){
		if(xb[a[i]-'a']>0)
		xb[a[i]-'a']--;
		else{
			flag=false;
			break;
		}
	}
	if(flag)
	cout<<"YES"<<endl;
	else
	cout<<"NO"<<endl;
	//system("PAUSE");
	return 0;
} 

3.最小面积矩形

给出一组xy平面上的点,找出这些点能组成的最小面积矩形,输出矩形的面积。
矩形的边分别平行于x轴与y轴。
如果无法找到矩形,输出0。
输入描述:
第一行输入为N,之后N行为点坐标(x,y),坐标点之间确保没有重复。
1<=N<=500
0<=x<=40000
0<=y<=40000
输出描述:
对于每组数据,输出可以组成面积的最小值,无法找到矩形输出0。
示例1:
输入
5 1
1
1 3
3 1
3 3
2 2
输出
4

4.虚拟物品的买卖

Unity酱是一个游戏爱好者,热衷于收集游戏中可交易的虚拟物品。
虚拟物品的价格会发生浮动,Unity酱想知道通过交易虚拟物品能获取的最大利润。
非负整数 F 代表了交易虚拟物品的手续费用。
给定一个整数数组 prices 长度为N,其中第 i 个元素代表了第 i 天的虚拟物品价格 ;
可以无限次地完成交易,但是你每次交易都需要付手续费。
如果你已经购买了一个虚拟物品,在卖出它之前你就不能再继续购买虚拟物品了。
返回获得利润的最大值。
输入描述:
第一行输入为F和N,F表示手续费,N表示prices数组长度
第二行输入为prices数组的元素 其中第 i 个元素代表了第 i 天的虚拟物品价格
输出描述:
可获得利润的最大值
备注
0 <= F.
0 < N.
0 < prices[i].
示例1:
输入
2 6
1 3 2 8 4 9
输出
8 说

F = 2, N = 6, prices = [1, 3, 2, 8, 4, 9],
能够达到的最大利润:
在此处买入 prices[0] = 1
在此处卖出 prices[3] = 8
在此处买入 prices[4] = 4
在此处卖出 prices[5] = 9
总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8.

#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<set>
#include<cstring>
#include<cmath>
using namespace std;
int price[1000];
int pro[1000];
int hold[1000];
int main(){
	int f,n;
	cin>>f>>n;
	for(int i=1;i<=n;i++){
		cin>>price[i];
		if(i==1){
			pro[i]=0;
			hold[i]=-price[i];
		}
		else{
			pro[i]=max(pro[i-1],hold[i-1]+price[i]-f);
			hold[i]=max(hold[i-1],pro[i-1]-price[i]);
		}
	}
	/*for(int i=1;i<=n;i++){
		cout<<pro[i]<<" "<<hold[i]<<endl;
	}*/
	cout<<pro[n]<<endl;
	return 0;
} 

5.勇气

Unity酱有这样一个游戏,游戏中士兵们会从前到后排成一排站好,每一个士兵都会有自身的战力值属性。
游戏中有一个特殊效果叫做“勇气”。
勇气:对于每一个士兵A和他身后的士兵B,如果A的战力值大于B的战力值,则A的能够获得1点勇气。
Unity酱想知道每一个士兵能够获得多少勇气。
输入描述:
第一行输入为N,N表示输入士兵队列的长度。
第二行为输入士兵的战力值,以空格隔开,从左到右即为士兵从前到后。
输出描述:
按从左到右(士兵从前到后)顺序输出每一个士兵能获得的勇气,以空格隔开
示例1:
输入
4 9
5 6 1
输出
3 1 1 0
说明
战力值 9 的士兵身后有 3 个战力值更小的士兵 (5,6和 1),故获得3点勇气.
战力值 5 的士兵身后有 1 个战力值更小的士兵 (1),故获得1点勇气.
战力值 6 的士兵身后有 1 个战力值更小的士兵 (1),故获得1点勇气.
战力值 1 的士兵身后有 0 个战力值更小的士兵,故获得0点勇气.

分析

扫描二维码关注公众号,回复: 12033847 查看本文章

暴力

猜你喜欢

转载自blog.csdn.net/LXQ1071717521/article/details/101933403
今日推荐