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 ...
随机推荐
- LINUX常见问题
FQA1:如何进入linux单用户模式修改root密码 进入单用户模式:1. grub进入启动画面之后,敲入“e”,把光标移动到kernel ...那一行,再敲入“e”,在kernel 一行的最后加上 ...
- 基于shell脚本比较数字加减乘除
让用户输入两个数来比较他们的大小 先用touch命令新建一个2.sh文件 在用vi进入i进入编辑状态 输入 保存后检查
- MLlib决策树与集成树
决策树是一种常见的分类与回归机器学习算法,由于其模型表达性好,便于理解,并能取得较好的效果,而受到广泛的应用.下图是一个简单的决策树,决策树每个非叶子节点包含一个条件,对于具有连续值的特征,该条件为一 ...
- Python之路【第四篇】python基础 之基本数据类型之集合
基本数据类型之集合 set set集合,是一个无序且不重复的元素集合 # set 不允许重复的集合 set允许重复的列表但是集合是无序的 #例如 # s = {1,23,23,4,55,55} # p ...
- Unity自动寻路Navmesh之入门
实例 我们要实现一个功能:点击场景中的一个位置,角色可以自动寻路过去.角色会绕过各种复杂的障碍,找到一条理论上”最短路径“. 步骤 1.创建地形 2.添加角色 3.创建多个障碍物,尽量摆的复杂一点,来 ...
- System.Dynamic.ExpandoObject 类型的简单使用
该类型可以实现的是动态添加属性和移除属性,有点类似 js 中对象的操作,非常灵活 static void Main(string[] args) { dynamic obj = new System. ...
- linux下Vim的使用
在vim中移动光标跟其他的编辑器中有很大的区别,不过一旦学会了,就会飞速的在文本中移动 复制粘贴dd 删除光标所在行dw 删除一个字(word)x 删除当前字符X 删除前一个字符D 删除到行末yy 复 ...
- #iOS问题记录#动态Html加载本地CSS和JS文件
所谓动态Html,指代码中组合生成的html字符串: 若需要加载本地CSS,图片,JS文件,则, 1,需要文件的全路径: 2,需要"file:///"标志: 例如: //获取文件全 ...
- 微信小程序demo汇总
wechat-app-music fenda-mock Wa-UI wx-query weapp-artand WeiXin-SmallApps-Information weapp-wechat-zh ...
- SQL——行值表达式(Row Value Expressions)
概述 最近接触了一个新概念——行值表达式,也叫做行值构造器.这是一个很强大的SQL功能,通常我们所操作的SQL表达式都只能针对一行中的单一字段进行操作比较,而行值表达式可以针对一行中的多个字段进行操作 ...