A.取中间那个点即可。

#include<bits/stdc++.h>
using namespace std; int a[]; int main()
{
ios::sync_with_stdio(false);
cin >> a[] >> a[] >> a[];
sort(a,a+);
cout << a[]-a[] << endl;
return ;
}

B.模拟,注意判断是否在括号内。

#include<bits/stdc++.h>
using namespace std; int n;
string s; int main()
{
cin >> n;
getchar();
getline(cin,s);
int maxx = ,cnt = ,now = ,flag = ;
for(int i = ;i < n;i++)
{
if(s[i] == '(')
{
flag = ;
now = ;
}
else if(s[i] == ')')
{
flag = ;
if(now) cnt++;
now = ;
}
else if(s[i] == '_')
{
if(flag == && now) cnt++;
now = ;
}
else
{
now++;
if(flag == ) maxx = max(maxx,now);
}
}
cout << maxx << " " << cnt << endl;
return ;
}

C.先算出ans,再把个数不到ans的数填满。

#include<bits/stdc++.h>
using namespace std; int n,m,a[],b[] = {}; int main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
for(int i = ;i <= n;i++)
{
cin >> a[i];
if(a[i] <= m) b[a[i]]++;
}
int ans = n/m,cnt = ,now = ;
for(int i = ;i <= n;i++)
{
if(a[i] <= m && b[a[i]] <= ans) continue;
while(b[now] >= ans) now++;
if(now == m+) break;
if(a[i] <= m) b[a[i]]--;
a[i] = now;
b[now]++;
cnt++;
}
cout << ans << " " << cnt << endl;
for(int i = ;i <= n;i++) cout << a[i] << " ";
cout << endl;
return ;
}

D.dfs找出每一个湖泊,按面积排序,把cnt-k个小的填满。

#include<bits/stdc++.h>
using namespace std; int n,m,k,vis[][] = {},ok,sum;
int dx[] = {,,-,};
int dy[] = {-,,,};
string s[];
struct xxx
{
int x,y,sum;
friend bool operator <(xxx a,xxx b)
{
return a.sum < b.sum;
}
}a[]; void dfs1(int x,int y)
{
if(vis[x][y]) return;
vis[x][y] = ;
sum++;
for(int i = ;i < ;i++)
{
int xx = x+dx[i],yy = y+dy[i];
if(xx < || xx > n || yy < || yy > m)
{
ok = ;
continue;
}
if(s[xx][yy] == '*') continue;
dfs1(xx,yy);
}
} void dfs2(int x,int y)
{
s[x][y] = '*';
for(int i = ;i < ;i++)
{
int xx = x+dx[i],yy = y+dy[i];
if(xx < || xx > n || yy < || yy > m || s[xx][yy] == '*') continue;
dfs2(xx,yy);
}
}
int main()
{
ios::sync_with_stdio(false);
cin >> n >> m >> k;
int cnt = ;
for(int i = ;i <= n;i++)
{
cin >> s[i];
s[i] = " "+s[i];
}
for(int i = ;i <= n;i++)
{
for(int j = ;j <= m;j++)
{
if(s[i][j] == '*' || vis[i][j]) continue;
ok = ;
sum = ;
dfs1(i,j);
if(ok)
{
a[++cnt].x = i;
a[cnt].y = j;
a[cnt].sum = sum;
}
}
}
sort(a+,a++cnt);
cnt -= k;
int ans = ;
for(int i = ;i <= cnt;i++)
{
ans += a[i].sum;
dfs2(a[i].x,a[i].y);
}
cout << ans << endl;
for(int i = ;i <= n;i++)
{
for(int j = ;j <= m;j++) cout << s[i][j];
cout << endl;
}
return ;
}

E.因为是无向图,所以有偶数个度为奇数的点,我们把他们与第n+1个点相连,则所有点的度都是偶数个,存在欧拉回路,输出这个回路的路径(不包括第n+1个点),符合要求。

#include<bits/stdc++.h>
using namespace std; int n,m,d[];
set<int> s[]; void dfs(int now)
{
while(s[now].size())
{
int t = *s[now].begin();
s[now].erase(t);
s[t].erase(now);
if(now != n+ && t != n+) cout << now << " " << t << endl;
dfs(t);
}
} int main()
{
int T;
cin >> T;
while(T--)
{
cin >> n >> m;
memset(d,,sizeof(d));
while(m--)
{
int x,y;
cin >> x >> y;
s[x].insert(y);
s[y].insert(x);
d[x]++;
d[y]++;
}
int ans = ;
for(int i = ;i <= n;i++)
{
if(d[i]%)
{
s[i].insert(n+);
s[n+].insert(i);
}
else ans++;
}
cout << ans << endl;
for(int i = ;i <= n;i++) dfs(i);
}
return ;
}

F.原图无向连通,可以把原图的除s,t外的点分为三类团。

①与s相连。②与t相连。③与s,t相连。

若不存在第③类团,则把相应团与s或t相连,最后把s与t相连。

若存在第③类团,则s与t不必相连,可以通过第③类团来把他们相连,这样其中某个点的度就少了1,为最优情况。

#include<bits/stdc++.h>
using namespace std; struct xx
{
int x,y;
xx(int a,int b):x(a),y(b){};
};
int n,m,x,y,dx,dy,cnt = ,a[] = {},b[] = {},vis[] = {};
vector<int> v[];
vector<xx> ans; void dfs(int now)
{
vis[now] = ;
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i];
if(t == x) a[cnt] = now;
else if(t == y) b[cnt] = now;
else if(!vis[t])
{
ans.push_back(xx(now,t));
dfs(t);
}
}
} int main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
for(int i = ;i <= m;i++)
{
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
cin >> x >> y >> dx >> dy;
for(int i = ;i <= n;i++)
{
if(vis[i] || i == x || i == y) continue;
++cnt;
dfs(i);
}
int z = ;
for(int i = ;i <= cnt;i++)
{
if(a[i] == )
{
ans.push_back(xx(b[i],y));
dy--;
}
else if(b[i] == )
{
ans.push_back(xx(a[i],x));
dx--;
}
else z++;
}
if(dx < || dy < || dx+dy- < z)
{
cout << "No" << endl;
return ;
}
if(z == ) ans.push_back(xx(x,y));
else
{
int flag = ;
for(int i = ;i <= cnt;i++)
{
if(a[i] == || b[i] == ) continue;
if(flag)
{
if(dx)
{
ans.push_back(xx(a[i],x));
dx--;
}
else
{
ans.push_back(xx(b[i],y));
dy--;
}
}
else
{
flag = ;
ans.push_back(xx(a[i],x));
dx--;
ans.push_back(xx(b[i],y));
dy--;
}
}
}
cout << "Yes" << endl;
for(int i = ;i < ans.size();i++) cout << ans[i].x << " " << ans[i].y << endl;
return ;
}

Codeforces_723的更多相关文章

随机推荐

  1. jedis的scan操作要注意cursor数据类型

    环境 jedis3.0.0 背景 在使用jedis的"scan"操作获取redis中某些key时,发现总是出现类型转换的异常--"java.lang.ClassCastE ...

  2. Bandicam(班迪录屏)高清视频录制工具

    Bandicam(班迪录屏)简单好用的录屏幕,录游戏,录视频的功能强大的屏幕录像软件,比起其他软件其性能更加卓越. 与其他软件相比,用Bandicam录制的视频大小更小, 不仅保证原文件的质量.

  3. ffmpeg参数编码大全

    ffmpeg version N-49044-g89afa63 Copyright (c) 2000-2013 the FFmpeg developers built on Jan 19 2013 2 ...

  4. 【转载】解决KindEditor图片上传对话框位置异常问题(浏览器放大缩小时对话框不见了)

    今早在整理文件上传模块的时候,发现富文本编辑器 kindeditor 上传图片的对话框无法显示,其实对话框已经生成了,但是它没有top值,所以在页面上看不见. 捣鼓了一个多小时,代码看了一大串,没解决 ...

  5. Android/Unity大乱斗-完整双方集成交互指南

    这是一个很长很长的story!-芝麻粒儿创作 开篇 源码地址:GitHub 本文目的,将Unity集成到Android端,学完本文后你可以做到 Android任意布局加载Unity 3D场景 任意操作 ...

  6. JS获取时间戳的几种方法与区别

    var today = new Date() Date.now()) Date.parse(today) today.valueOf()) today.getTime() 可以看出,第二种是精确到秒的 ...

  7. Python中url标签使用详解

    url标签: 1.在模板中,我们经常要使用一些url,实现页面之间的跳转,比如某个a标签中需要定义href属性.当然如果通过硬编码的方式直接将这个url固定在里面也是可以的,但是这样的话,对于以后进行 ...

  8. 图解kubernetes scheduler基于map/reduce无锁设计的优选计算

    优选阶段通过分离计算对象来实现多个node和多种算法的并行计算,并且通过基于二级索引来设计最终的存储结果,从而达到整个计算过程中的无锁设计,同时为了保证分配的随机性,针对同等优先级的采用了随机的方式来 ...

  9. 9.Super详解

    super注意点: surper()是调用父类的构造方法,而且必须在构造方法的第一个 super必须只能出现在子类的方法或者构造方法中! super()和this()不能同时调用构造方法! Vs th ...

  10. ElEmentUI选择器弹出框定位错乱问题解决(弹出框出现在左上角)

    这个是原问题,我之前是没问题的,后来的突然出现了这个问题,查了好多没找到,后来看文档才发现的.通过这个问题,说明看文档的重要性,嘻嘻 解决办法是在选择器里插入一个 :popper-append-to- ...