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點勇氣.

分析

暴力

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章