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. 对 Redux 一头雾水?看完这篇就懂了

    首先,学习 Redux 可能会很困难 当你终于学会了如何使用 React,也有了自己去构建一些应用的信心,那会是一种非常棒的感觉.你学会了管理状态,一切看起来井井有条.但是,很有可能这就到了你该学习 ...

  2. 关于Integer 和Double包装类创建对象时的底层解析

    public void method1() { Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i ...

  3. Fabric1.4:手动启动 first-network 网络(一)

    注意:本文所使用的 fabric 版本为 v1.4.3,与其它版本的网络存在差异. 手动启动 first-network 网络系列分为三部分: 手动启动 first-network 网络(一) 手动启 ...

  4. 字符串String类常见算法题

    1.将一个字符串进行反转.将字符串中指定部分进行反转. public class StringDemo { //方式一:转换为char[] public String reverse(String s ...

  5. 七种武器:JavaScript 新特性闪亮登场

    JavaScript(或ECMA Script) 是一门不断发展的语言,有许多关于如何前进的建议和想法.TC39(技术委员会39)是负责定义JS标准和特性的委员会,今年他们非常活跃.以下是目前处于&q ...

  6. CF449B Jzzhu and Cities 迪杰斯特拉最短路算法

    CF449B Jzzhu and Cities 其实这一道题并不是很难,只是一个最短路而已,请继续看我的题解吧~(^▽^) AC代码: #include<bits/stdc++.h> #d ...

  7. 暑假提高组集训Day1 T2

    那么这一道题我在考试的时候写挂了(0分 呜呜~) 我原来的思路是广搜来骗取部分分(哈哈~) 但是我忘记了一个非常重要的问题 我广搜开的数组没有考虑负的下标 下一次考试如果再写暴力 就可以把坐标都加上一 ...

  8. php获取本年、本月、本周时间戳和日期格式

    时间戳格式: //获取今日开始时间戳和结束时间戳 $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime(0 ...

  9. dp-最长公共子序列(LCS)

    字符序列 与 字符字串的区别 序列是可以不连续的字符串 , 字串必须要是连续的 . 问题描述 : 给定两串字符串 abcde 和 acdf , 找出 2 串中相同的字符序列,观察知 相同的字符序列为 ...

  10. http GET 和 POST 请求的优缺点和误区 --前端优化

    Get和Post在面试中一般都会问到,一般的区别:(1)post更安全(不会作为url的一部分,不会被缓存.保存在服务器日志.以及浏览器浏览记录中)(2)post发送的数据更大(get有url长度限制 ...