【ZJSU - 大红大紫:ACM - Template】比赛用模板13:杂类
作者:互联网
杂类
与、或、异或
运算 | 运算符、数学符号表示 | 解释 |
---|---|---|
与 | & 、and |
同1出1 |
或 | | 、or |
有1出1 |
异或 | ^ 、\(\bigoplus\)、xor |
不同出1 |
一些结论:
对于给定的 \(X\) 和序列 \([a_1,a_2,…,a_n]\) ,有:\(\pmb {X=(X \&a_1)or(X\&a_2)or…or(X\&a_n)}\) 。
原理是 \(and\) 意味着取交集,\(or\) 意味着取子集。来源 - 牛客小白月赛49C
三分
\(\mathcal{Provided \ by \ \pmb{Hamine}}\) 。给出一个 \(n\) 次函数,保证在范围 \([l, r]\) 内存在一点 \(x\),使得 \([l, x]\) 上单调增,\([x, r]\) 上单调减。求出 \(x\) 的值。
#include <bits/stdc++.h>
using namespace std;
#define eps 1e-8
const int N = 15;
int n;
double l, r, a[N];
double f(double x){
double ans = 0;
for (int i = 0; i <= n; i ++ )
ans = ans * x + a[i];
return ans;
}
int main(){
cin >> n >> l >> r;
for (int i = 0; i <= n; i ++ )
cin >> a[i];
while (r - l > eps){
double mid1 = l + (r - l) / 3.0, mid2 = r - (r - l) / 3.0;
if ( f(mid1) > f(mid2) )
r = mid2;
else
l = mid1;
}
printf("%.5lf\n", l);
return 0;
}
读入优化 \(\tt fread\)
可以处理正、负整数。
char buf[1 << 21], *p1 = buf, *p2 = buf;
inline int getc() {
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
inline int read() {
int ret = 0, f = 0; char ch = getc();
while (!isdigit(ch)) {
if (ch == '-') f = 1;
ch = getc();
}
while (isdigit(ch)) {
ret = ret * 10 + ch - 48;
ch = getc();
}
return f ? -ret : ret;
}
大整数类 \(\tt \_\_int128\)
只在基于 \(\tt Lumix\) 系统的环境下可用,38位精度,除输入输出外与普通数据类型无差别。输入输出流定义如下:
__int128 read() {
int128 x = 0; bool f = 0; char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') f = 1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = (x << 1) + (x << 3) + (c ^ 48);
c = getchar();
}
return f ? -x : x;
}
void write(__int128 x) {
if (x < 0) putchar('-'), x = -x;
if (x > 9) write(x / 10);
putchar(x % 10 + '0');
}
对拍版子
- 数据构造
int r(int a, int b) { //随机数构造
return (long long)rand() * rand() % (b - a + 1) + a;
}
int main(){
freopen("3.txt", "w", stdout); //输出文件
srand((unsigned)time(0)); //种子传入
return 0;
}
- \(\tt{}Windows\) 版 \(\tt{}bat\)
:loop
3
2
1
fc 1.out 2.out
if errorlevel==1 pause
goto loop
- \(\tt{}C++\) 版 \(\tt{}bat\)
int main() {
for(int Case = 1; Case <= 10000; Case ++) {
cout << "==============\n";
system("3.exe"); system("1.exe");
double start = clock();
system("2.exe");
double end = clock();
if(system("fc 1.out 2.out")) { puts("WA"); break; }
else { cout << end - start << "ms\n"; }
}
return 0;
}
标签:13,return,int,大红大紫,tt,ZJSU,double,mid2,mid1 来源: https://www.cnblogs.com/WIDA/p/16676300.html