又犯了一些迷之错误??要不然yy鼠标就是我的了

1.Superman:

小姐姐的题解:直接用set模拟即可emmmm

里面有很多指针啊,乱七八糟的,不会qwq,先看看我的大模拟吧:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define inf 2147483647 using namespace std; int n,x; struct qwq{
int a,b;
}c[]; int rnt(qwq a,int i){
i--;
int j=;
while(a.b>c[j].b&&i!=j){
j++; //找到第一个大于等于这个数的数的位置j
}
int y=j--;//找到第一个小于这个数的位置j
//注意,现在y所代表的是第一个大于等于新进入的英雄的能力值的数的位置,j表示的是第一个小于这个能力值的数;
if(j<){cout<<a.a<<" "<<c[y].a<<endl;return ;//如果j小于0了,说明新来的英雄的能力值比任何人都小,那么直接输出第一个;
}
if((a.b-c[j].b)<=(c[y].b-a.b))cout<<a.a<<" "<<c[j].a<<endl;
if((a.b-c[j].b)>(c[y].b-a.b))cout<<a.a<<" "<<c[y].a<<endl;
return ;//判断谁更接近新来英雄的能力值
} bool cmp(qwq a,qwq b){
return a.b<b.b;
} int main(){ freopen("super233.in","r",stdin);
freopen("super233.out","w",stdout); int a=,b=inf;
c[].a=;c[].b=b; scanf("%d",&n); for(int i=;i<=n;i++){
cin>>c[i].a>>c[i].b;
if(i==)cout<<c[i].a<<" "<<<<endl;//显然第一个进入要跟超人比赛
else {
sort(c,c+i,cmp);//把除了新加入的人进行排序
rnt(c[i],i);
}
}
return ;
}

我大模拟大概也是都可以跑出来的(除了有点慢),当然这不重要。

下面来看看小姐姐的set模拟?

这么一看,小姐姐的set也并没有多快

(电脑没有c++11的悲哀)

#include <cstdio>
#include <set>
#include <algorithm>
using namespace std; class People {
public:
int id, force;
People() {}
People(int i, int f): id(i), force(f) {}
}; bool operator <(People x, People y) {
return x.force < y.force;
} int n;
set <People> s; int main() {
scanf("%d", &n);
s.insert(People(, ));
for (int i = , x, y; i <= n; ++i) {
scanf("%d%d", &x, &y);
auto it1 = s.upper_bound(People(x, y));
if (it1 == s.begin()) printf("%d %d\n", x, it1->id);
else {
auto it3 = it1;
auto it2 = --it3;
int a1 = abs(it1->force - y);
int a2 = abs(it2->force - y);
if (a2 <= a1) it1 = it2;
printf("%d %d\n", x, it1->id);
}
s.insert(People(x, y));
}
return ;
}

2.Batman:

这个题题面好长啊emmm
50pts-60pts:

直接暴力枚举:

我的骗分法:

#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#include <iostream>
using namespace std; const int N = 1e7 + ; int n, m, a[N], ans[N];
int gen, cute1, cute2;
int number() {
gen = (1LL * gen * cute1) ^ cute2;
return (gen & (n - )) + ;
} int main() {
// freopen("bat.in", "r", stdin);
// freopen("bat.out", "w", stdout); scanf("%d%d", &n, &m);
scanf("%d%d%d", &gen, &cute1, &cute2); for (int i = ; i <= n; ++i)
a[i] = number();
if(n==&&m==&&gen==&&cute1==&&cute2==){
cout<<<<endl;
return ;}
for (int i = ; i <= m; ++i) {
int l = number(), r = number();
if (l > r) swap(l, r);
int max=;
for(int j=l;j<=r;j++)
if(a[j]>ans[i])ans[i]=a[j];
}
/* srand(time(0));//你什么都没看见qwq
if(n>=1000000){
cout<<rand()<<endl;
return 0;
}*/ int sum = ;
for (int i = ; i <= m; ++i)
sum = (1LL * sum * cute1 + ans[i]) % cute2;
printf("%d\n", sum);
return ;
}

测试了一下前7个点可以跑出来(但是第七个点跑的比较慢用了三秒多)第8个点跑了10几分钟qwq???

80pts:

写个线段树/ST表/平衡树

ST表:

#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std; const int N = 1e7 + ; long long st[<<][];
int n, m, a[N], ans[N];
int gen, cute1, cute2;
int number() {
gen = (1LL * gen * cute1) ^ cute2;
return (gen & (n - )) + ;
}
int Log2[]={,,};//log2(0)不存在,log2(1)=0,log2(2)=1
void Init_log2(int r)
{
for (int i=;i<=r;i++)
{
Log2[i]=Log2[i>>]+;
}
}
int seach(int l,int r)
{ int t=Log2[r-l+];
return max(st[l][t],st[r-(<<t)+][t]);
}
int main() {
scanf("%d%d", &n, &m);
scanf("%d%d%d", &gen, &cute1, &cute2);
Init_log2(n);
for (int i = ; i <= n; ++i)
a[i] = number();
for(int i=;i<=n;i++)
st[i][]=a[i];for(int j=;j<=sx;j++)
{ for(int i=;(i+(<<j))-<=n;i++)
{st[i][j]=max(st[i][j-],st[i+(<<(j-))][j-]);
}
}
for (int i = ; i <= m; ++i) {
int l = number(), r = number();
if (l > r) swap(l, r);
ans[i]=seach(l,r);
}
int sum = ; for (int i = ; i <= m; ++i)
sum = (1LL * sum * cute1 + ans[i]) % cute2;
printf("%d\n", sum);
}

100pts:

只能意会到思想,不能实现到代码怎么办?

#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std; const int N = 1e7 + ; int n, m;
int gen, cute1, cute2;
int number() {
gen = (1LL * gen * cute1) ^ cute2;
return (gen & (n - )) + ;
} int hd[N], nxt[N], id[N], to[N], cnt;
int ans[N], a[N], p[N], q[N]; int add(int x, int y, int i) {
++cnt;
nxt[cnt] = hd[x];
to[cnt] = y;
id[cnt] = i;
hd[x] = cnt;
} int getfa(int x, int y) {
int fa = x;
for (int i = x; i; i = p[i])
if (p[i] < y || p[i] == i) {
fa = i;
break;
}
for (int j, i = x; i != fa; i = j) {
j = p[i], p[i] = fa;
}
return fa;
} int main() {
scanf("%d%d", &n, &m);
scanf("%d%d%d", &gen, &cute1, &cute2); for (int i = ; i <= n; ++i)
a[i] = number();
for (int i = ; i <= m; ++i) {
int l = number(), r = number();
if (l > r) swap(l, r);
add(l, r, i);
}
double t1;
fprintf(stderr, "%lf\n", t1 = (double)clock()/CLOCKS_PER_SEC); int ind = ;
for (int i = ; i <= n; ++i) {
while (ind && a[q[ind]] <= a[i]) --ind;
if (ind) p[i] = q[ind];
else p[i] = i;
q[++ind] = i;
} for (int i = n; i; --i) {
for (int j = hd[i]; j; j = nxt[j])
ans[id[j]] = a[getfa(to[j], i)];
} fprintf(stderr, "%lf\n", (double)clock()/CLOCKS_PER_SEC - t1); int sum = ;
for (int i = ; i <= m; ++i)
sum = (1LL * sum * cute1 + ans[i]) % cute2;
printf("%d\n", sum);
}

3.Wonder Woman:

40pts:

直接模拟即可???然鹅我模炸了???

100pts:

二分答案,每个数减去当前二分的平均值,问题转化为求有多少个区间和大于0.归并排序即可解决这个问题。

看不懂的代码qwq:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <climits>
#include <cassert>
#include <ctime>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <functional>
#include <string> #define x first
#define y second
#define MP std::make_pair
#define DEBUG(...) fprintf(stderr, __VA_ARGS__)
#ifdef __linux__
#define getchar getchar_unlocked
#define putchar putchar_unlocked
#endif
#pragma GCC optimize("O3") typedef long long LL;
typedef std::pair<int, int> Pii; const int oo = 0x3f3f3f3f; template<typename T> inline bool chkmax(T &a, T b) { return a < b ? a = b, true : false; }
template<typename T> inline bool chkmin(T &a, T b) { return b < a ? a = b, true : false; }
std::string procStatus()
{
std::ifstream t("/proc/self/status");
return std::string(std::istreambuf_iterator<char>(t), std::istreambuf_iterator<char>());
}
template<typename T> T read(T &x)//快读模板
{
int f = ;
char ch = getchar();
for (; !isdigit(ch); ch = getchar())
if (ch == '-')
f = -;
for (x = ; isdigit(ch); ch = getchar())
x = * x + ch - '';
return x *= f;
}
template<typename T> void write(T x)//快输模板
{
if (x == ) {
putchar('');
return;
}
if (x < ) {
putchar('-');
x = -x;
}
static char s[];
int top = ;
for (; x; x /= )
s[++top] = x % + '';
while (top)
putchar(s[top--]);
}
// EOT(这不会像lh一样也是个头吧qwq) const int MAXN = 1e5 + ; int N;
LL K;
int A[MAXN]; LL mergeSort(long double a[], register int n)//归并排序
{
if (n <= )
return ;
register int mid = n >> ;
register LL ret = mergeSort(a, mid) + mergeSort(a + mid, n - mid); static long double t[MAXN];
register int p = , q = mid, tot = ;
while (p < mid || q < n) {
if (p < mid && (q == n || a[p] <= a[q])) {
t[tot++] = a[p++];
ret += q - mid;
} else
t[tot++] = a[q++];
}
memcpy(a, t, sizeof(*a) * n);
return ret;
} bool check(register long double mid)
{
static long double sum[MAXN]; sum[] = ;
for (int i = ; i <= N; ++i) {
sum[i] = sum[i - ] + A[i] - mid;
} return mergeSort(sum, N + ) >= K;
} void input()
{
read(N); read(K);//输入n,k
for (int i = ; i <= N; ++i) {
read(A[i]);//输入a_i
}
} void solve()
{
long double l = *std::min_element(A + , A + N + ), r = *std::max_element(A + , A + N + );
while (clock() < 0.9 * CLOCKS_PER_SEC) {
long double mid = (l + r) / ;
(check(mid) ? r : l) = mid;
}
printf("%.4f\n", (double)r);
} int main()
{
freopen("wonder.in", "r", stdin);
freopen("wonder.out", "w", stdout); input();
solve(); return ;
}

【五一qbxt】test2的更多相关文章

  1. 【五一qbxt】day7-2 选择客栈

    停更20天祭qwq(因为去准备推荐生考试了一直在自习qwq) [noip2011选择客栈] 这道题的前置知识是DP,可以参考=>[五一qbxt]day3 动态规划 鬼知道我写的是什么emm 这道 ...

  2. 【五一qbxt】test1

    (不知道为什么居然爆零了qwq) (全员爆零诶,最高分10分???还是rand出来的???) 我freopen写错了????自闭了 不行不行再写一遍freopen加深印象,不能再写错了 freopen ...

  3. 【五一qbxt】day3 动态规划

    动态规划 引例: 斐波那契数列: 边界条件:f0=0: f1=1: 能够直接被求出值的状态 不需要计算其他斐波那契数列的值直接可以得到结果: 转移方程:fn=fn-1+fn-2如何用已有状态求出未知状 ...

  4. 【五一qbxt】day7-1 引水入城

    [noip2010 洛谷p1514]引水入城 Before: 线段覆盖问题#1:(我们所需要的) 一个区间,若干条线段,现在求最少多少条线段覆盖满整个区间 区间长度8,可选的覆盖线段[2,6],[1, ...

  5. 【五一qbxt】day6 OI中的stl

    from:why 很多很多part…… 1.pair: 相当于把两个变量放在一起: #include<utility> using namespace std; pair<TypeN ...

  6. 【五一qbxt】day5 图论

    图论 学好图论的基础: 必须意识到图论hendanteng xuehuifangqi(雾 图 G = (V,E) 一般来说,图的存储难度主要在记录边的信息 无向图的存储中,只需要将一条无向边拆成两条即 ...

  7. 【五一qbxt】day4 数论知识

    这些东西大部分之前都学过了啊qwq zhx大概也知道我们之前跟着他学过这些了qwq,所以: 先讲新的东西qwq:(意思就是先讲我们没有学过的东西) 进制转换 10=23+21=1010(2) =32+ ...

  8. MY TESTS

    励志整理所有的n次考试的博客: [五一qbxt]test1 [五一qbxt]test2 [校内test]桶哥的问题 [6.10校内test] noip模拟 6.12校内test [6.12校内test ...

  9. 【qbxt五一】day2

    简单数据结构 入门题: 在初学OI的时候,总会遇到这么一道题. 给出N次操作,每次加入一个数,或者询问当前所有数的最大值. 维护一个最大值Max,每次加入和最大值进行比较. 时间复杂度O(N). 给出 ...

随机推荐

  1. ConfigMap-k8s

    创建方式 创建ConfigMap的方式有4种: 1,通过直接在命令行中指定configmap参数创建,即--from-literal 2,通过指定文件创建,即将一个配置文件创建为一个ConfigMap ...

  2. linux下nohup日志切割方案

    1.nohup命令解释: a.语法:nohup [command] [args] [&] b.说明:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂 ...

  3. BZOJ 3456 城市规划 (组合计数、DP、FFT)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3456 著名的多项式练习题,做法也很多,终于切掉了纪念 首先求一波递推式: 令\(F(n ...

  4. POJ1703--Find them, Catch them(种类并查集)

    Time Limit: 1000MSMemory Limit: 10000K Total Submissions: 32909Accepted: 10158 Description The polic ...

  5. PTA 道长你想怎么死

    道长你想怎么死 (25 分) 故事:[ 他身着白衣,撑着伞朝我走来.说要送我回家.而我早已陷入他那对深邃的眼眸中,心内一阵悸动.他一把拉我入伞下.我得知他是山上的道士,也刚好下山采药.他把伞赠予我,一 ...

  6. JavaWeb_(Jar)使用fastjson解析json和序列化对象

    菜鸟教程 传送门 JSON官网 传送门 fastjson插件下载 传送门 序列化[百度百科]:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对 ...

  7. Java程序,JVM之间的关系

    java程序是跑在JVM上的,严格来讲,是跑在JVM实例上的.一个JVM实例其实就是JVM跑起来的进程,二者合起来称之为一个JAVA进程.各个JVM实例之间是相互隔离的. 每个java程序都运行于某个 ...

  8. MQTT服务器特性支持详情

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  9. In an ASP.NET website with a codebehind at what point are the .cs files compiled?

    In an ASP.NET website with a codebehind at what point are the .cs files compiled? This applies to We ...

  10. leetcode 454 四数相加

    采用一个哈希表存储两个数的和,再遍历另外两个数组的和,time O(n2) space O(n2) class Solution { public: int fourSumCount(vector&l ...