A 题: 说的是在(LR) 之间找出ab互质 bc 互质 ac 不互质的 3个数 数据量小直接暴力

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b){
return b==?a:(gcd(b,a%b));
}
int main()
{
ll L,R;
while(scanf("%I64d%I64d",&L,&R)==){
bool falg=false;
for(ll i=L; i<=R-; ++i){
for(ll j=i+; j<=R-; ++j){
ll f= gcd(i,j);
if(f!=) continue;
for(ll e = j+; e<=R; ++e){
f = gcd(e,j);
if(f!=) continue;
f=gcd(i,e);
if(f==) continue;
falg=true;
printf("%I64d %I64d %I64d\n",i,j,e);
break;
}
if(falg) break;
}
if(falg) break;
}
if(falg==false) puts("-1");
} return ;
}

B 题: 说的是找出cnt1 + cnt2 个质数然后 他们各不相同 cnt1 个不是x倍数的 cnt2 个不是y倍数的,分配完这些数后最大值最小

这样二分最大值,假设在mid 内 x 倍数为 px y的为py xy的为pxy 那么优先将 px-pxy的分给cnt2 把 py-pxy分给cnt1 这样接下来判段剩下的是否可以分配给cnt1和cnt2 剩余的 这样不断二分下去

#include <cstdio>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long ll;
ll cnt1,cnt2,x,y;
ll maxv(ll a, ll b){ return a>b?a:b; }
bool solve(ll mid){
ll a1 = mid/x;
ll b1 = mid/y;
ll c1 = mid/(x*y);
ll acnt1 = maxv(cnt1 - (b1-c1),0LL);
ll acnt2 = maxv(cnt2 - (a1-c1),0LL);
ll lest = mid-(a1+b1-c1);
if(lest>=(acnt1+acnt2)) return true;
else return false;
}
int main()
{ while(scanf("%I64d%I64d%I64d%I64d",&cnt1,&cnt2,&x,&y)==){
ll R = 9223372036854775807LL;
ll L=;
ll ans;
while(R>=L){
ll mid = (R+L)/;
if(solve(mid)){
ans=mid; R=mid-;
}else{
L=mid+;
}
}
printf("%I64d\n",ans);
}
return ;
}

C 题: 输的是给了n个数 你写出n的一个排列使得 相邻的数的差值有k个不同的值,然后这n个数必须是1—n 不能重复,这样不断的往两边取 直到有k个不同的

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <set>
using namespace std;
typedef long long ll;
const int maxn = ;
int ans[maxn];
set<int>Q;
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)==){
int L=;
int num=;
int R=n+;
int now=;
ans[]=;
for(int i=; i<k; ++i){
now=-now;
if(now==){
L++;
ans[num]=L;
num++;
}else{
R--;
ans[num]=R;
num++;
}
}
if(num<n){
if(now==){
for(int i=R-; i>L; i--) ans[num++]=i;
}else{
for(int i=L+; i<R; i++) ans[num++]=i;
}
}
for(int i=; i<n; ++i){
printf("%d%c",ans[i],i==(n-)?'\n':' ');
}
} return ;
}

D题: 说的是给了n个数 m次操作 然后给了他们区间&后的值 这样问他们与后是否是合法的,我们知道给了区间& 的结果 也就是区间内的值每个都|上了这个值才能保证他们都具有相同的值

这样然后 将给的区间全部或上 q 然后 最后在按照 题目给的& 上一次 一旦出现与答案不符就证明是错误的

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxn = ;
int cL,cR,W,b,n;
struct Itree{
int V[maxn*];
void pushdown(int o){
V[o*]|=V[o];
V[o*+]|=V[o];
V[o]=;
}
void build(int o, int L, int R){
if(L==R) return ;
pushdown(o);
int mid=(L+R)/;
build(o*,L,mid);
build(o*+,mid+,R);
V[o]=V[o*]&V[o*+];
}
void update(int o, int L, int R){
if(cL<=L&&R<=cR){
V[o]|=W;
return;
}
pushdown(o);
int mid=(L+R)/;
if(cL<=mid)
update(o*, L, mid);
if(cR>mid) update(o*+,mid+,R);
}
void query(int o, int L, int R){
if(cL<=L&&R<=cR){
if(b==)
W=V[o];
else W=W&V[o];
b=;
return ;
}
int mid=(L+R)/;
if(cL<=mid) query(o*,L,mid);
if(cR>mid) query(o*+,mid+,R);
}
void print(int o, int L, int R){
if(L==R){
printf("%d%c",V[o],L==n?'\n':' ');
return ;
}
int mid = (L+R)/;
print(o*, L, mid);
print(o*+,mid+,R);
}
}T;
int LL[maxn],RR[maxn],QQ[maxn];
int main()
{
int m;
while(scanf("%d%d",&n,&m)==){
memset(T.V,,sizeof(T.V));
for(int i=; i<m; ++i){
scanf("%d%d%d",&LL[i],&RR[i],&QQ[i]);
cL=LL[i];
cR=RR[i];
W=QQ[i];
T.update(,,n);
}
bool falg=true;
T.build(,,n);
for(int i=; i<m; ++i){
b=;
cL=LL[i];
cR=RR[i];
T.query(,,n);
if(QQ[i]!=W){
falg=false; break;
}
}
if(falg==false){
printf("NO\n");
}else {
printf("YES\n");
T.print(,,n);
}
}
return ;
}

E 题说的 你把每个串从其他串中区别出来的期望步数, 状态压缩live[S] 表示 S 这个状态中有多少个串需要在选字母,然后dp[S] 表示到达这个状态的概率 ,对于每个一个S 有相应的期望

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
double dp[<<];
char str[][];
long long live[<<];
int main()
{
int n;
while(scanf("%d",&n)==){
memset(live,,sizeof(live));
memset(dp,,sizeof(dp));
for(int i=; i<n; ++i){
scanf("%s",str[i]);
}
int m=strlen(str[]);
for(int i=; i<n; ++i){ for(int j=i+; j<n; ++j )
{
int S=;
for(int k=; k<m; ++k)
if(str[i][k]==str[j][k])
S|=(<<k);
live[S]|=(1LL<<i)|(1LL<<j);
}
}
for(int S = (<<m)-; S>; --S){
for(int i=; i<m; ++i)
if(S&(<<i)) live[S^(<<i)]|=live[S];
}
dp[]=;
double ans=;
for(int S=; S<<<m; ++S){
int num=;
for(int i=; i<n; ++i)
if(live[S]&(1LL<<i)) num++;
ans+=dp[S]*num;
num=;
for(int i=; i<m; ++i)
if(S&(<<i)) num++;
for(int i=; i<m; ++i)
if( (S&(<<i)) == )
dp[ S|(<<i) ]+= dp[S]/(m-num);
}
printf("%.15lf\n",ans/n);
}
return ;
}

Codeforces Round #275 (Div. 2) 题解的更多相关文章

  1. Codeforces Round #275 (Div. 1)A. Diverse Permutation 构造

    Codeforces Round #275 (Div. 1)A. Diverse Permutation Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 ht ...

  2. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  3. Codeforces Round #275 (Div. 2) C - Diverse Permutation (构造)

    题目链接:Codeforces Round #275 (Div. 2) C - Diverse Permutation 题意:一串排列1~n.求一个序列当中相邻两项差的绝对值的个数(指绝对值不同的个数 ...

  4. 构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation

    题目传送门 /* 构造:首先先选好k个不同的值,从1到k,按要求把数字放好,其余的随便放.因为是绝对差值,从n开始一下一上, 这样保证不会超出边界并且以防其余的数相邻绝对值差>k */ /*** ...

  5. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  6. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...

  7. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

  8. Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F

    Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...

  9. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

随机推荐

  1. STM32的操作过程,寄存器配置与调试过程(转载)

    很多学习stm32的,为什么学习stm32他也不知道,我们所知道的就是各个论坛讨论stm32的很多,而我们很多人之所以学习stm32是很多的淘宝卖家做了大量的图片文字宣传,于是我们经不住诱惑就买了板子 ...

  2. xdebug和最重要的php调试技巧

    好几年没有写PHP代码了,最近写了一些.我比较厌烦php,主要是调试麻烦,要按无数次F5,经常刷出空白. 以前调试总是依赖于在代码中加入下面两行 error_reporting(E_ALL ^ E_N ...

  3. 免费在线的web性能测试网站

    由于需要测试网站并发,所以去百度搜了搜,最开始找了个webkaka结果告知,已下线,好像是个很好的在线网站.现在只有网站速度诊断的http://pagespeed.webkaka.com/

  4. Objective-c官方文档翻译 类的定义

     类是对象的蓝图. 一个类是描述了对象的行为和属性.例如NSString的一个实例.他的类提供了各种的方法来转化和表示他的内部字符的表示.   每个类的实例都包含了这个类的属性和行为.例如每个NSSt ...

  5. 【LNMP】 fileinfo扩展安装

    1  查看服务器php版本 : php -v 2  进入目录 , 解压相对应的PHP 版本压缩包, cd /lnmp1./srctar zxvf php-7.0.tar.gz 3  输入以下命令 cd ...

  6. Intellij debug模式使用

    1.这里以一个web工程为例,点击图中按钮开始运行web工程. 2.设置断点 3.使用postman发送http请求 4.请求发送之后会自动跳到断点处,并且在断点之前会有数据结果显示 5.按F8 在 ...

  7. JS-完美运动框架(封装)

    function getStyle(obj, name) { if(obj.currentStyle) { return obj.currentStyle[name]; } else { return ...

  8. 【BZOJ4195】[Noi2015]程序自动分析 并查集

    [BZOJ4195][Noi2015]程序自动分析 Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3 ...

  9. vue 引入通用 css

    1.在入口 js 文件 main.js 中引入,一些公共的样式文件,可以在这里引入. import Vue from 'vue' import App from './App' // 引入App这个组 ...

  10. java个人所得税计算器

    class Caculate{ private String name; private double money; private double actual; /** * @param usern ...