滴滴
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點勇氣.
分析
暴力