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. 1077 互评成绩计算 (20 分)C语言

    在浙大的计算机专业课中,经常有互评分组报告这个环节.一个组上台介绍自己的工作,其他组在台下为其表现评分.最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平 ...

  2. Docker+Nginx使用流程(笔记)

    Docker+Nginx使用流程 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统 # uname -r 查看你当前的内核版本 # yum -y insta ...

  3. 【linux学习笔记】

    网上看一个两小时突击linux的教程,就想补充一下linux的知识.想着一天抽出俩小时立马就能学完呢,结果乱七八糟的事情拖了四五天,实际完成某项任务的时间超出预期完成任务的两部不止.好了," ...

  4. 在GeneXus开发过程中如何进行自动化测试?

    1. 简介 GXtest是基于专门为GeneXus平台开发的应用程序提供的自动化测试解决方案. 我们强调“解决方案”和“自动化”两个词: 解决方案:GXtest为整个GeneXus软件开发生命周期提供 ...

  5. 一个动态扩展表格控件列和行的 jQuery 插件

    一个动态扩展表格控件列和行的 jQuery 插件 不过这并不影响使用鸭! 看这里:https://github.com/zhuwansu/table-ext.js 一个简单的示范 html <t ...

  6. Qt Installer Framework翻译(3-2)

    添加组件 如果用户在初始安装期间未选择所有可安装组件,则后续也可以使用包管理器从仓库中获取剩余组件进行安装.包管理器是维护工具的一部分,该维护工具在初始安装过程中与应用程序一起被安装.仅当包含组件的仓 ...

  7. C入门题目

    37. 反转一个3位整数 反转一个只有3位数的整数. 样例 样例 1: 输入: number = 123 输出: 321 样例 2: 输入: number = 900 输出: 9 注意事项 你可以假设 ...

  8. 我的C++开发工具链

    工欲善其事,必先利其器.想要干好活,顺手的工具是必不可少的.来分享下我的C++开发工具链. 平台:Windows 编译器:MSVC IDE:Visual Studio 版本控制:TortoiseGit ...

  9. P2869 [USACO07DEC]美食的食草动物Gourmet Grazers

    P2869 [USACO07DEC]美食的食草动物Gourmet Grazers 题目:约翰的奶牛对食物越来越挑剔了.现在,商店有M 份牧草可供出售,奶牛食量很大,每份牧草仅能供一头奶牛食用.第i 份 ...

  10. 2、初始ES6及Vue

    今日内容 es6的语法 let 特点: 1.局部作用域 2.不会存在变量提升 3.变量不能重复声明 const 特点: 1.局部作用域 2.不会存在变量提升 3.不能重复声明,只声明常量 不可变的量 ...