【A. Bear and Game:】
【题意】给这么多时间点,这些时间点是interesting的点,如果连续15分钟不出现interesting的点的话,就要换了;问最长能看多上时间
【分析】直接模拟一下即可。
【AC代码】
#include <bits/stdc++.h> using namespace std; int a[100]; int main(){ int n; while(~scanf("%d",&n)){ for(int i=1; i<=n; i++){ scanf("%d",&a[i]); } if(a[1]>15){ puts("15"); return 0; } for(int i=2; i<=n; i++){ if(a[i]-a[i-1]>15){ printf("%d\n",a[i-1]+15); return 0; } } if(a[n]<75) { cout<<a[n]+15<<endl; } else{ cout<<"90"<<endl; } } return 0; }
【B. Problems for Round】
【题意】把1到n这些数放到两个容器里,要求第一个容器里的任何数都小于第二个容器里的任何数,还有就是相似的不能放一块,相似没有传递性
【分析】两个容器第一个记录最大值,第二个记录最小值,对每一对相似的数,小的放在第一个,大的放在第二个,同时检测是否满足最大值最小值,还要更新最大最小,答案就是两者的差!
【AC代码】
#include <bits/stdc++.h> using namespace std; int a[100010]; const int INF = 0x3f3f3f3f; int main(){ int n,m,u,v,maxx=-1,minn=INF,ans; cin>>n>>m; for(int i=1; i<=m; i++){ cin>>u>>v; if(u>v)swap(u,v); maxx = max(maxx,u); minn = min(minn,v); } if(m==0)ans=n-1; else{ if(minn<maxx) ans=0; else ans = minn-maxx; } cout<<ans<<endl; return 0; }
【C. Bear and Colors】
【题意】给出这么多颜色,在一个序列中,dominant是出现次数最多的数,如果出现次数最多的不止一个,那么就是数值最小的那个
【分析】可以直接暴力统计了
【AC代码】
#include <bits/stdc++.h> using namespace std; int n,a[5010]; int ans[5010]; int temp; int main(){ cin>>n; for(int i=1; i<=n; i++) cin>>a[i]; for(int i=1; i<=n; i++){ int cnt[5010]={0}; int maxx=-1; for(int j=i; j<=n; j++){ cnt[a[j]]++; if(cnt[a[j]]>maxx){ maxx = cnt[a[j]]; temp = a[j]; }else if(cnt[a[j]]==maxx&&a[j]<temp){ temp = a[j]; } ans[temp]++; } } for(int i=1; i<=n; i++)cout<<ans[i]<<" "; return 0; }
【D. Bear and Two Paths】
【题意】给出n个节点,然后给出两条路线的起点和终点,要求你构造一个无向图,使无向图中a,b之间和c,d之间均无直接相连的边,且要求这个图的边的条数不超过k
【分析】发现n==4时怎么都不可能满足,可以构造这样的无向图,第一条路线ac...db;第二条路线ca...bd,这样的边是n+1条,是最少的了
【AC代码】
#include <bits/stdc++.h> using namespace std; int n,k,a,b,c,d; int ans[1010],vis[1010]; int main(){ cin>>n>>k; cin>>a>>b>>c>>d; memset(vis,0,sizeof(vis)); memset(ans,0,sizeof(ans)); vis[a]=vis[b]=vis[c]=vis[d]=1; if(k<n+1||n==4){ puts("-1"); return 0; } ans[1]=a,ans[2]=c,ans[n-1]=d,ans[n]=b; int pos=3; for(int i=1; i<=n; i++){ if(!vis[i]) ans[pos++]=i; } for(int i=1; i<=n; i++)cout<<ans[i]<<" ";cout<<endl; cout<<ans[2]<<" "<<ans[1]<<" "; for(int i=3; i<=n-2; i++)cout<<ans[i]<<" "; cout<<ans[n]<<" "<<ans[n-1]<<endl; return 0; }
【ps:后面的题暂时做不来QAQ】
时间: 2024-10-08 23:50:29