codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. "Or" Game(暴力,数学)

解题思路:就是求数 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(暴力,数学)的更多相关文章
- Codeforces Round #367 (Div. 2) C. Hard problem
题目链接:Codeforces Round #367 (Div. 2) C. Hard problem 题意: 给你一些字符串,字符串可以倒置,如果要倒置,就会消耗vi的能量,问你花最少的能量将这些字 ...
- 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 ...
- Codeforces Round #367 (Div. 2) C. Hard problem(DP)
Hard problem 题目链接: http://codeforces.com/contest/706/problem/C Description Vasiliy is fond of solvin ...
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] C C Problem about Polyline 数学
C. A Problem about Polyline ...
- [Codeforces] Round #320 (Div.2)
1.前言 虽然这次我依旧没有参加正式比赛,但是事后还是看了看题目的...一般不怎么刷Codeforces. A.Raising Bacteria You are a lover of bacteria ...
- 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) ...
- 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).满足条件的 ...
- 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 ...
- 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 ...
随机推荐
- js学习笔记
javacript笔记根据EC5.0一共有六种数据类型:number,string,bool undefine,nullobject(广义的) --->object(狭义的),array,fun ...
- Salesforce入门学习介绍
大家好,本人作为重庆德勤2016年的实习生,进公司实习后有幸接触到了Salesforce,通过一个多月的自学以及培训,准备和大家分享一下我的Salesforce学习之路. 一.什么是Salesforc ...
- 对Hibernate的理解
---恢复内容开始--- 一.面向对象设计的软件内部运行过程可以理解成就是不断创建各种新对象,建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程.不管程序运行的过程和操作怎么样,本 ...
- java并发编程(十五)内存可见两种方式 加锁和volatile
1.volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制. ...
- Java的书写格式,标识符及命名规则,注释
Java的书写格式,标识符及命名规则,注释 1.Java语言的书写格式(约定成俗) 1) 大括号要对齐(左大括号与句尾对其,后面大括号与句头对齐),并且成对写 2) 左大括号前面有空格 3) 遇到左大 ...
- Android课程---序列化与反序列化(转)
ava序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的 ...
- perl 遍历对象数组
my $appsList ; eval { $appsList = $db->query( $sqlstr1 )->hashes->to_array; }; ### $appsLis ...
- Linux下的Finger指令
Linux finger命令 Linux finger命令可以让使用者查询一些其他使用者的资料.会列出来的资料有: Login Name User Name Home directory Shell ...
- 一步步学习javascript基础篇(6):函数表达式之【闭包】
回顾前面介绍过的三种定义函数方式 1. function sum (num1, num2) { return num1 + num2; } //函数声明语法定义 2. var sum = funct ...
- 新浪微博UWP版-实现‘分享功能’的艰难路
索引 介绍 遇到的问题 寻求帮助 最终的解决方案 最终效果 介绍 在整个Team的共同努力下,在众多WPer的期待下,Weibo UWP版终于正式发布了.有关Weibo UWP版更多的信息请大家参考这 ...