链接:https://www.nowcoder.com/acm/contest/214/C
来源:牛客网
题目描述
clccle一行?个人来到了一个诡异的世界,她们需要去寻找逃出这个地方的方法——找到神秘的所罗门之匙
她们决定从中随机选出一些人去寻找钥匙,并在其中选出一个队长,clccle不想知道自己有多大几率被选中,她只想知道一共有多少种选择的方案 (选出的人数要在1−?之间,不同的队长算不同的方案)。
方案数对1000000007取模
输入描述:
第一行,一个整数?。
输出描述:
一个整数,表示方案数。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll pow(ll a,ll b)
{
ll ans=1,base=a;
while(b!=0)
{
if(b&1!=0) ans=ans*base%mod;
base=base*base%mod;
b>>=1;
}
ans=ans%mod;
return ans;
}
int main()
{
ll n;
ll x=2;//一定要把2变为long long型
scanf("%lld",&n);
ll sum=n*pow(x,n-1)%mod;
printf("%lld\n",sum);
return 0;
}
链接:https://www.nowcoder.com/acm/contest/214/F
来源:牛客网
题目描述
clccle是个蒟蒻,她经常会在学校机房里刷题,也会被同校的dalao们虐,有一次,她想出了一个毒瘤数据结构,便兴冲冲的把题面打了出来,她觉得自己能5s内切掉就很棒了,结果evildoer过来一看,说:"这思博题不是1s就能切掉嘛",clccle觉得自己的信心得到了打击,你能帮她在1s中切掉这道水题嘛?
你需要写一个毒瘤(划掉)简单的数据结构,满足以下操作
1.插入一个数x(insert)
2.删除一个数x(delete)(如果有多个相同的数,则只删除一个)
3.查询一个数x的排名(若有多个相同的数,就输出最小的排名)
4.查询排名为x的数
5.求一个数x的前驱
6.求一个数x的后继
输入描述:
第一行,输入一个整数n,表示接下来需要输入n行
接下来n行,输入 一个整数num和一个整数x
输出描述:
当num为3,4,5,6时,输出对应的答案
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int t;
cin>>t;
vector <int> q;
vector <int> ::iterator it;
while(t--){
int num,x;
scanf("%d%d",&num,&x);
if(num==1)
q.insert(lower_bound(q.begin(),q.end(),x),x);
else if(num==2)
q.erase(lower_bound(q.begin(),q.end(),x));
else if(num==3)
printf("%d\n",lower_bound(q.begin(),q.end(),x)-q.begin()+1);
else if(num==4)
printf("%d\n",q[x-1]);
else if(num==5){
it=lower_bound(q.begin(),q.end(),x);
printf("%d\n",*(--it));
}
else if(num==6){
it=upper_bound(q.begin(),q.end(),x);
printf("%d\n",*it);
}
}
}
链接:https://www.nowcoder.com/acm/contest/214/A
来源:牛客网
题目描述
有一天clccle和rqy走在某个国家的街头上,机智的rqy却发现周围的行人不太对劲,他们嘴里念念有词,说着"sqn tql!",一边漫无目的的行走,clccle也发现了这一点,却惊讶的发觉这种奇怪的病毒会向周围的城市,最终会感染整个国家,因为网络已经崩溃,所以她们忘记了自己所在的城市,她们唯一知道的是这种病毒是从当前她们所在的城市开始传播的,并且这个国家的所有城市到这个城市的距离和最小(所有道路的距离都为1),现在给定聪明的你一张整个国家的地图,请你帮rqy和clccle找到她们现在可能在这个国家的哪一个城市.
输入描述:
两个整数n,m,代表这个国家一共有n个城市,城市之间只有m条道路
接下来m行,每行两个整数a,b代表城市a,b之间有一条联通的道路
输出描述:
多个整数,输出当前clccle和rqy可能所在的点
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 7;
const int INF = 0x3f3f3f3f;
struct node {
int to, nxt;
}a[maxn];
int cnt, head[maxn], n, m, mmin, v[maxn], f[maxn];
void add(int u, int v) {
cnt++;
a[cnt].nxt = head[u];
a[cnt].to = v;
head[u] = cnt;
}
void getpoint(int u, int fa) {
int i, to;
v[u] = 1;
for (i = head[u]; i != -1; i = a[i].nxt) {
to = a[i].to;
if (to == fa) continue;
getpoint(to, u);
v[u] += v[to];
}
int &ans = f[u] = n - v[u];
for (i = head[u]; i != -1; i = a[i].nxt) {
to = a[i].to;
if (to == fa) continue;
ans = max(ans, v[to]);
}
mmin = min(mmin, ans);
}
int main() {
int i, x, y;
scanf("%d%d", &n, &m);
memset(head, -1, sizeof(head));
memset(v, 0, sizeof(v));
cnt = 0;
mmin = INF;
for (int i = 1; i <= m; i++) {
scanf("%d%d", &x, &y);
add(x, y);
add(y, x);
}
getpoint(1, -1);
for (i = 1; i <= n; i ++ ) {
if (f[i] == mmin) {
printf("%d ", i);
}
}
return 0;
}
#include<iostream>
#include<cmath>
using namespace std;
int h[200001],cnt=0,n,m;
int s[200001],f[200001],minn=0x7fffffff,b[200001];
struct Edge{
int to,next;
}e[400001];
void AddEdge(int x,int y)
{
e[++cnt].to=y;
e[cnt].next=h[x];
h[x]=cnt;
}
void dfs(int x,int prt)
{
int i,y;
s[x]=1;
for(i=h[x];i;i=e[i].next)
{
y=e[i].to;
if(y==prt)continue;
dfs(y,x);
s[x]+=s[y];
f[x]=max(f[x],s[y]);
}f[x]=max(f[x],n-s[x]);
}
int main(){
int i,x,y;cin>>n>>m;
for(i=1;i<=n-1;i++)
{
cin>>x>>y;
AddEdge(x,y);
AddEdge(y,x);
}
dfs(1,0);
for(i=1;i<=n;i++)
if(f[i]<minn)minn=f[i];
for(i=1;i<=n;i++)
if(f[i]==minn)b[++b[0]]=i;
for(i=1;i<=b[0];i++)cout<<b[i]<<" ";
}