A.直接暴力就行了,先把能组合的按线性组合掉,再枚举剩下相邻没用过的。

#include<bits/stdc++.h>
using namespace std; string s;
int vis[] = {}; int main()
{
ios::sync_with_stdio(false);
cin >> s;
int ans = ;
for(int i = ;i < s.length();i++)
{
if(vis[i-] || vis[i]) continue;
if(s[i-] == 'V' && s[i] == 'K')
{
ans++;
vis[i-] = ;
vis[i] = ;
}
}
for(int i = ;i < s.length();i++)
{
if(vis[i-] || vis[i]) continue;
if(s[i-] == 'V' || s[i] == 'K')
{
ans++;
break;
}
}
cout << ans << endl;
return ;
}

B.若存在,直接令y等于z就可以了。

#include<bits/stdc++.h>
using namespace std; string s1,s2; int main()
{
ios::sync_with_stdio(false);
cin >> s1 >> s2;
string s3;
int flag = ;
for(int
i = ;i < s1.length();i++)
{
if(s2[i] <= s1[i]) s3 = s3+s2[i];
else
{
flag = ;
}
}
if(flag) cout << -<< endl;
else cout << s3 << endl; return ;
}

C.二分,先判断是否能永久运行,若不行,二分答案。

#include<bits/stdc++.h>
using namespace std; int n,p,a[],b[]; bool ok(double x)
{
double sum = ;
for(int i = ;i <= n;i++)
{
if(a[i]*x > b[i]) sum += a[i]*x-b[i];
}
if(sum < p*x) return ;
return ;
}
int main()
{
ios::sync_with_stdio(false);
cin >> n >> p;
long long sum = ;
for(int i = ;i <= n;i++)
{
cin >> a[i] >> b[i];
sum += a[i];
}
if(sum <= p)
{
cout << - << endl;
return ;
}
double l = ,r = 1e18;
while(abs(l-r) > 1e-)
{
double mid = (l+r)/;
if(ok(mid)) l = mid;
else r = mid;
}
cout << l << endl;
return ;
}

D.枚举每一组相邻3个顶点,取中间点到两边点构成直线的距离的最小值,再除以2。

#include<bits/stdc++.h>
using namespace std; int n;
double a[],b[]; double f(double x1,double y1,double x2,double y2,double x3,double y3)
{
double aa = y2-y1,bb = x1-x2,cc = x2*y1-x1*y2;
return abs(aa*x3+bb*y3+cc)/sqrt(aa*aa+bb*bb);
}
int main()
{
ios::sync_with_stdio(false);
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i] >> b[i];
double ans = 1e18;
for(int i = ;i <= n;i++)
{
int j = i+,k = j+;
if(j > n) j -= n;
if(k > n) k -= n;
ans = min(ans,f(a[i],b[i],a[j],b[j],a[k],b[k]));
ans = min(ans,f(a[i],b[i],a[k],b[k],a[j],b[j]));
ans = min(ans,f(a[j],b[j],a[k],b[k],a[i],b[i]));
}
cout << fixed << setprecision() << ans/ << endl;
return ;
}

E.令p[i]为第i次出现的前i个元素积(%m),问题是如何构造最长的p序列。

设元素i,j,则①i可以向j转移的条件是gcd(m, i)丨gcd(m, j)

      ②i,j可以互相转移的条件是gcd(m, i)=gcd(m, j)

于是,我们把每一个gcd看成点,同一个gcd间的元素可以相互转化,然后构成图,dfs找最长路线。

有了p序列,pi-1*x%p==pi(P0=1),求解每一个x输出即可,这个可以用扩展欧几里德解决。

0这个点可以放到最后特殊处理。

#include<bits/stdc++.h>
#define LL long long
using namespace std; int n,m,cantbe[] = {},vis[] = {},dp[],nextt[];
vector<int> v[]; LL ex_gcd(LL a,LL b,LL &x,LL &y)
{
int d = a;
if(!b)
{
x = ;
y = ;
}
else
{
d = ex_gcd(b,a%b,y,x);
y -= (a/b)*x;
}
return d;
} LL f(LL a,LL b,LL n)
{
LL d,x,y;
d = ex_gcd(a,n,x,y);
x = (x%n+n)%n;
return (x*b/d)%n;
} int dfs(int now)
{
if(dp[now] > ) return dp[now];
dp[now] = v[now].size();
for(int i = now*;i < m;i += now)
{
if(v[i].size() == ) continue;
int t = dfs(i);
if(dp[now] < v[now].size()+t)
{
dp[now] = t+v[now].size();
nextt[now] = i;
}
}
return dp[now];
} int main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
for(int i = ;i <= n;i++)
{
int x;
cin >> x;
cantbe[x] = ;
}
for(int i = ;i < m;i++)
{
if(!cantbe[i]) v[__gcd(i,m)].push_back(i);
}
memset(dp,,sizeof(dp));
memset(nextt,-,sizeof(nextt));
dfs();
int now = max_element(dp,dp+m)-dp;
cout << dp[now]+(cantbe[] == ) << endl;
int last = ;
while(now != -)
{
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i];
cout << f(last,t,m) << " ";
last = t;
}
now = nextt[now];
}
if(cantbe[] == ) cout << << endl;
else cout << endl;
return ;
}

Codeforces_801的更多相关文章

随机推荐

  1. linux下安装cmake方法(2)---直接用命令安装

    1.linux环境下打开网页,输入上网账号密码,确保已经联网 2.打开终端:输入cmake --version,如果出现版本号,表明已经安装,如果显示没有安装cmake,则需要安装 3.在终端里输入: ...

  2. 使用wireshark 对flutter 框架APP进行抓包

    引言 最近公司开发一个APP,由于原生人力不足,直接由前端使用flutter 开发的,而使用flutter框架开发的客户端 fiddler无法抓到包,所以我采用wireshark从路由层面抓包 fid ...

  3. python循环语句(while和for)

    循环语句分成两种,while循环 和 for循环 作用:可以使指定的代码块重复指定的次数 while循环: # 语法: # while 条件表达式 : # 代码块 # else : # 代码块 # 执 ...

  4. Office系列(1)---将Office文件(Word、PPT、Excel)转换为PDF文件

    需求: 将Office文件作为文章并在网页上预览,主要为(Word.PPT.Excel)3种类型文件. 研究了一下,找到了两种解决方案 直接调用微软的在线预览功能实现(预览前提:预览资源必须可以直接通 ...

  5. dp-LCS(递归输出最短合串)

    Problem Description The company "21st Century Fruits" has specialized in creating new sort ...

  6. 树上点分治 poj 1741

    Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v ...

  7. scrapy selector选择器

    这部分内容属于补充内容 1.xpath() 2.css() 3.正则表达式 # 多个值,列表 response.xpath('//a/text()').re('(.*?):\s(.*)') # 取第一 ...

  8. Vue 编程式的导航

    1.应用场景 在同一路由的情况下,不同的参数之间进行切换 注意:别忘记初始化路由页面 2.用法 a.定义方法 b.实现方法 c.初始化路由页面 3.案例 <template> <di ...

  9. 神秘常量0x077CB531,德布莱英序列的恩赐

    本文发布于游戏程序员刘宇的个人博客, 转载请注明来源https://www.cnblogs.com/xiaohutu/p/10950011.html 某天我在优化游戏的算法,在将一个个关键数据结构优化 ...

  10. Elasticsearch:是什么?你为什么需要他?

    Elasticsearch 是什么? Elasticsearch 是一个分布式的.开源的搜索分析引擎,支持各种数据类型,包括文本.数字.地理.结构化.非结构化. Elasticsearch 是基于 A ...