解题思路:就是求数 n 对应的二进制数中有多少个 1

#include <iostream>
#include<cstdio>
using namespace std; int main(){
int n;
cin>>n;
int ans = ;
// while(n){//这也是一种好的方法
// n = n&(n-1);
// ++ans;
// } while(n){
if(n&) ++ans;
n>>=;
}
cout<<ans<<endl;
return ;
}

解题思路:对(strength, i, j)按照strength进行递减排序,从左到右进行遍历,用b[N]表示i和j有关系!

如果发现b[i]或者b[j]有关系了,则跳过这个strength, 否则b[i] =j, b[j] = i;

#include <iostream>
#include <algorithm>
#include<cstdio>
using namespace std; struct node{
int x;
int i, j;
}a[]; int b[]; bool cmp(node a, node b){
return a.x > b.x;
} int main(){
int x, n;
int c = ;
cin>>n;
for(int k=; k<=*n; ++k){
for(int kk=; kk<k; ++kk){
cin>>x;
a[c].x = x;
a[c].i = k;
a[c++].j = kk;
}
}
sort(a, a+c, cmp);
int cnt = ;
for(int i=; i<c; ++i){
if(!b[a[i].i] && !b[a[i].j]){
b[a[i].i] = a[i].j;
b[a[i].j] = a[i].i;
++cnt;
}
if(cnt == n) break;
}
for(int i=; i<=*n; ++i){
if(i!=) cout<<" ";
cout<<b[i];
}
cout<<endl;
return ;
}

解题思路:

 

我们可以发现这样的一个规律:

(1)首先b一定要小于a,否则无论如何曲线也无法通过(a,b);

(2)设int k=a/b, 如果k为奇数,说明这个点在上图的绿色的线上, 没关系,我们让 k+=1;这样的话一定有(0,0), (a,b)这两点确定的直线的

斜率1/k介于(1/(k-1),  1/(k+1))之间,那么我们可以通过缩小(或者放大)X的值,使得第 k/2 个周期块 斜率为-1的那条边经过(a, b)。此时

的X值就是最小的!

(3)如果(a,b)在第 k/2 个周期块 斜率为-1的那条边上,那么这条边与X轴的交点就是(a+b, 0), 从(0, 0)到(a+b, 0)一共经过了 k/2个周期,

所以 X = (a+b)*1.0/(k/2 * 2)

(4)唉....想的这么明白,容易吗.....

#include <iostream>
#include <algorithm>
#include<cstdio>
#include<cmath>
using namespace std; int main(){
int a, b;
cin>>a>>b;
if(b>a) {
cout<<-<<endl;
} else {
int k = a/b;
if(k&) ++k;
printf("%.12lf\n", (a+b)*1.0/k);
}
return ;
}

解题思路:如果某个数a[i]乘以x, 必定会导致a[i]的二进制的长度增大。

首先求出或运算的前缀和后缀,然后对每个a[i]操作如下: a[i]*=x^k(x的k次方); 最后找到a[i]|pref[i-1]|suff[i+1]的最大值!

其实可以优化一处,就是a[i]|pref[i-1]|suff[i+1]的最大值一定对应二进制长度最大的a[i]; 可通过log(a[i])+1求得二进制长度!

#include <iostream>
#include <algorithm>
#include<cstdio>
#include<cmath>
#define N 200010
using namespace std; __int64 a[N];
__int64 pref[N];
__int64 suff[N]; int n, k, x; int main(){
scanf("%d%d%d", &n, &k, &x);
long long maxN = ;
for(int i=; i<=n; ++i)
scanf("%I64d", &a[i]);
long long xk = (long long)(pow((double)x, (double)k) + 0.5);
for(int i=; i<=n; ++i){
pref[i] = pref[i-] | a[i];
suff[n-i+] = suff[n-i+] | a[n-i+];
} for(int i=; i<=n; ++i){
long long num = a[i]*xk | pref[i-] | suff[i+];
if(maxN < num)
maxN = num;
}
printf("%I64d\n", maxN);
return ;
}

codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. "Or" Game(暴力,数学)的更多相关文章

  1. Codeforces Round #367 (Div. 2) C. Hard problem

    题目链接:Codeforces Round #367 (Div. 2) C. Hard problem 题意: 给你一些字符串,字符串可以倒置,如果要倒置,就会消耗vi的能量,问你花最少的能量将这些字 ...

  2. Codeforces Round #603 (Div. 2) A. Sweet Problem(水.......没做出来)+C题

    Codeforces Round #603 (Div. 2) A. Sweet Problem A. Sweet Problem time limit per test 1 second memory ...

  3. Codeforces Round #367 (Div. 2) C. Hard problem(DP)

    Hard problem 题目链接: http://codeforces.com/contest/706/problem/C Description Vasiliy is fond of solvin ...

  4. Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] C C Problem about Polyline 数学

                                                                           C. A Problem about Polyline   ...

  5. [Codeforces] Round #320 (Div.2)

    1.前言 虽然这次我依旧没有参加正式比赛,但是事后还是看了看题目的...一般不怎么刷Codeforces. A.Raising Bacteria You are a lover of bacteria ...

  6. codeforces 578a//A Problem about Polyline// Codeforces Round #320 (Div. 1)

    题意:一个等腰直角三角形一样的周期函数(只有x+轴),经过给定的点(a,b),并且半周期为X,使X尽量大,问X最大为多少? 如果a=b,结果就为b 如果a<b无解. 否则,b/(2*k*x-a) ...

  7. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] A A Problem about Polyline(数学)

    题目中给出的函数具有周期性,总可以移动到第一个周期内,当然,a<b则无解. 假设移动后在上升的那段,则有a-2*x*n=b,注意限制条件x≥b,n是整数,则n≤(a-b)/(2*b).满足条件的 ...

  8. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] C. Weakness and Poorness 三分 dp

    C. Weakness and Poorness Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  9. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] B. "Or" Game 线段树贪心

    B. "Or" Game Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/578 ...

随机推荐

  1. API,框架,组件

    API 是什么,API 就是通过提供方便使用的接口来执行它实现的功能. 用一个手电筒来作比喻: 手电筒的按钮就是接口,按下按钮就是它的方便的使用方式,发光就是它的功能,在这里我们可以称这个手电筒是个 ...

  2. nodejs redis 发布订阅机制封装

    最近项目使用redis,对publish 和 subscribe的使用进行了了解,并进行了封装. var config = require('../config/config'); var log = ...

  3. Linux OpenVPN 服务端吊销(revoke)客户端证书

    (转自:https://www.xiaohui.com/dev/server/20070904-revoke-openvpn-client.htm) OpenVPN 服务器与 VPN 客户端之间的身份 ...

  4. div 添加滚动条

    <div id="dic" style="overflow:auto">

  5. STM32之通用定时器

    广大的互联网的大家早上中午晚上..又好..没错了..我又来了..写博客不是定时的..为什么我要提写博客不是定时的呢??聪明的人又猜到我要说什么了吧.有前途.其实我还是第一次听到定时器有通用和高级之分的 ...

  6. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  7. HDU2818 并查集

    Building Block Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. System.Dynamic.ExpandoObject 类型的简单使用

    该类型可以实现的是动态添加属性和移除属性,有点类似 js 中对象的操作,非常灵活 static void Main(string[] args) { dynamic obj = new System. ...

  9. 解决Unity5+Vuforia+Network本地联机发布到Android上白屏的问题

    Unity5+Vuforia+Network本地联机,在Android下点击联机,然后识别模型就出现白屏,点击屏幕上相应位置的按钮(已白屏,但点击该看不见的按钮)还是能起作用,如跳转到其他场景正常. ...

  10. TP5验证规则使用

    定义验证器类: namespace app\index\validate; use think\Validate; class User extends Validate { protected $r ...