滴滴
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点勇气.
分析
暴力