没全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; }没全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)扑克牌游戏大家应该都比较熟悉了,一副牌由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
给定一个字符串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; }给出一组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
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; }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点勇气.
分析
暴力
