机房人的精神状态
2026-10-06 12:22:02
发布于:北京
周所众知,知所周众。
机房人的精神状态一直就“非常健康”。
比如这位猿猴老哥:

AC
原意:通过(accept)
现意:“AC=Answer Coarse=粗劣的答案”
WA
原意:错误 (wrong answer)
现意:‘’WA=Wonderful Answer=好答案"
TLE
原意:超时(time limit exceeded)
现意:“TLE=Time Limit Enough=时间充裕”
MLE
原意:空间超标(memory limit exceeded)
现意:“MLE=Memory Limit Enough=内存充裕”
CE
原意:编译错误(compile error)
现意:“CE=Compile Easily=轻松通过编译”
RE
原意:运行时错误(runtime error)
现意:“RE=Run Excellently=完美运行”
UKE
原意:未知错误(unknown error)
现意:“UKE=Unbelievablly Keep Enough Score=难以置信地保持足够的分数”
OLE
原意:超出输出限制(output limit exceeded)
现意:OLE: Output Limit Enough=输出充裕

看完之后感觉测评机要“黑话”了。
ACGO和lugu一道比较简单的入门题大家都知道,当然是A+Bproblem。(不对,是
A93245.「SDOI2017」龙与地下城,有胆量的可以去突破一下0%通过率)
可就是这普普通通的A+B,却被某位机友(别误会)整成了这样:
最新版:最无敌的(114514版,504行)!!
#include<cmath>
#include<iostream>
#include<cstring>
//********一些辅助函数与FFT实现
const double PI=4atan(1);
template<typename T>
void Swap(T &a,T &b){
T c=a;
a=b;
b=c;
return;
}
template<typename T>
T Max(const T &a,const T &b){
return a<b?b:a;
}
typedef long long ll;
struct comp{
double real,imag;
comp operator+(const comp &x)const{
return {real+x.real,imag+x.imag};
}
comp operator-(const comp &x)const{
return {real-x.real,imag-x.imag};
}
comp operator(const comp &x)const{
return {realx.real-imagx.imag,realx.imag+x.realimag};
}
comp operator/(const unsigned &x)const{
return {real/(double)x,imag/(double)x};
}
};
void FFT(comp f,unsigned n,int rev){
for(unsigned i=1,j=n>>1,k;i<n-1;i++){//位逆序置换
if(i<j)
Swap(f[i],f[j]);
k=n>>1;
while(j>=k){
j-=k;
k>>=1;
}
j+=k;
}
for(unsigned l=2;l<=n;l<<=1){//蝶形运算
double arg=2PIrev/l;
comp wn={cos(arg),sin(arg)};
for(unsigned i=0;i<n;i+=l){
comp w={1,0};
for(unsigned j=0;j<(l>>1);j++){
comp f1=f[i+j];
comp f2=f[i+j+(l>>1)];
f[i+j]=f1+wf2;
f[i+j+(l>>1)]=f1-wf2;
w=wwn;
}
}
}
if(!~rev)
for(unsigned i=0;i<n;i++)
f[i]=f[i]/n;
}
//*******高精度整数类
#define BASE 100//因为FFT的精度问题严重,我们只压2位
template<const unsigned Size>
class bigint{
private:
unsigned len;
int num[Size];
void init(){
memset(num,0,sizeof(num));
len=1;
}
bool abs_greater_equal(const bigint &a)const{
if(len!=a.len)
return len>a.len;
for(int i=len;i;i--)
if(num[i]!=a.num[i])
return num[i]>a.num[i];
return 1;
}
public:
bigint(){
init();
}
void get_num(std::string s){
init();
int f=0;
unsigned slen=s.length();
if(s[0]'-')
num[0]=f=1;
len=0;
unsigned temp=0,w=1;
for(int i=slen-1;i>=f;i--){
temp+=(s[i]^48)*w;
w=(w<<1)+(w<<3);
if(wBASE||if){
num[++len]=(int)temp;
temp=0;
w=1;
}
}
if(temp||len0)
num[len]=temp;
}
bool operator<(const bigint &a)const{
if(num[0]&&!a.num[0])
return 1;
if(!num[0]&&a.num[0])
return 0;
if(num[0]){
if(len!=a.len)
return len>a.len;
for(int i=len;i;i--)
if(num[i]!=a.num[i])
return num[i]>a.num[i];
}
else{
if(len!=a.len)
return len<a.len;
for(int i=len;i;i--)
if(num[i]!=a.num[i])
return num[i]<a.num[i];
}
return 0;
}
bigint operator+(const bigint &a)const{
bigint res;
if(len==1&&num[1]0){
res=a;
return res;
}
if(a.len1&&a.num[1]==0){
res=*this;
return res;
}
if(num[0]==a.num[0]){
res.num[0]=num[0];
unsigned len_sum=1;
while(len_sum<len+a.len)
len_sum<<=1;
comp *fa=new complen_sum;
comp *fb=new complen_sum;
for(unsigned i=0;i<len;i)
fa[i]={(double)num[i+1],0};
for(unsigned i=0;i<a.len;i++)
fb[i]={(double)a.num[i+1],0};
FFT(fa,len_sum,1);
FFT(fb,len_sum,1);
for(unsigned i=0;i<len_sum;i++)
fa[i]=fa[i]+fb[i];
FFT(fa,len_sum,-1);
res.len=Max(len,a.len);
ll temp=0;
for(unsigned i=0;i<res.len;i++){
ll val=(ll)round(fa[i].real)+temp;
res.num[i+1]=(int)(val%BASE);
temp=val/BASE;
}
if(temp)
res.num[res.len]=temp;
while(res.len>1&&res.num[res.len]==0)
res.len--;
delete[] fa;
delete[] fb;
}
else{
if(abs_greater_equal(a)){
res.num[0]=num[0];
unsigned len_sum=1;
while(len_sum<len+a.len)
len_sum<<=1;
comp *fa=new complen_sum;
comp *fb=new complen_sum;
for(unsigned i=0;i<len;i)
fa[i]={(double)num[i+1],0};
for(unsigned i=0;i<a.len;i++)
fb[i]={(double)a.num[i+1],0};
FFT(fa,len_sum,1);
FFT(fb,len_sum,1);
for(unsigned i=0;i<len_sum;i++)
fa[i]=fa[i]-fb[i];
FFT(fa,len_sum,-1);
res.len=Max(len,a.len);
ll temp=0;
for(unsigned i=0;i<res.len;i++){
ll val=(ll)round(fa[i].real)+temp;
if(val<0){
val+=BASE;
temp=-1;
}
else
temp=0;//借位
res.num[i+1]=(int)(val%BASE);
}
if(temp)
res.num[res.len]=temp;
while(res.len>1&&res.num[res.len]==0)
res.len--;
delete[] fa;
delete[] fb;
}
else{
res.num[0]=a.num[0];
unsigned len_sum=1;
while(len_sum<len+a.len)
len_sum<<=1;
comp *fa=new complen_sum;
comp *fb=new complen_sum;
for(unsigned i=0;i<len;i)
fa[i]={(double)num[i+1],0};
for(unsigned i=0;i<a.len;i++)
fb[i]={(double)a.num[i+1],0};
FFT(fa,len_sum,1);
FFT(fb,len_sum,1);
for(unsigned i=0;i<len_sum;i++)
fa[i]=fb[i]-fa[i];
FFT(fa,len_sum,-1);
res.len=Max(len,a.len);
ll temp=0;
for(unsigned i=0;i<res.len;i++){
ll val=(ll)round(fa[i].real)+temp;
if(val<0){
val+=BASE;
temp=-1;
}
else
temp=0;
res.num[i+1]=(int)(val%BASE);
}
if(temp)
res.num[++res.len]=temp;
while(res.len>1&&res.num[res.len]0)
res.len--;
delete[] fa;
delete[] fb;
}
if(res.len1&&res.num[1]==0)
res.num[0]=0;
}
return res;
}
bigint operator(const bigint &a)const{
bigint res;
if((len==1&&num[1]0)||(a.len1&&a.num[1]==0))
return res;
res.num[0]=num[0]^a.num[0];
unsigned len_sum=1;
while(len_sum<len+a.len)
len_sum<<=1;
comp *fa=new complen_sum;
comp *fb=new complen_sum;
for(unsigned i=0;i<len;i++)
fa[i]={(double)num[i+1],0};
for(unsigned i=0;i<a.len;i++)
fb[i]={(double)a.num[i+1],0};
FFT(fa,len_sum,1);
FFT(fb,len_sum,1);
for(unsigned i=0;i<len_sum;i++)
fa[i]=fa[i]*fb[i];
FFT(fa,len_sum,-1);
res.len=len+a.len;
ll temp=0;
for(unsigned i=0;i<res.len;i++){
ll val=(ll)(fa[i].real+0.5)+temp;
res.num[i+1]=(int)(val%BASE);
temp=val/BASE;
}
if(temp)
res.num[++res.len]=temp;
while(res.len>1&&res.num[res.len]0)
res.len--;
delete[] fa;
delete[] fb;
return res;
}
void read(){
init();
std::string s;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch'-')
s.push_back('-');
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s.push_back(ch);
ch=getchar();
}
get_num(s);
}
void print(){
if(num[0])
putchar('-');
bool leading_zero=1;
for(int i=len;i;i--){
if(leading_zero)
printf("%d",num[i]);
else
printf("%02d",num[i]);
leading_zero=0;
}
putchar('\n');
return;
}
};
//********程序主体
const int N=1<<10,M=100;
int n,m;
bigint<114514> a,b,c;
int main(){
a.read();
b.read();
c=a+b;
c.print();
return 0;
}
这是一份基于 FFT 实现的高精度大整数类
但是我个人认为加法重载 operator+好像是错的。聪明的大佬们可以关注一下这个题解。

《精神状态良好》
让我们动动小手打开yydsluogu,就会发现还有高手

是的!清华北大就集训这玩意儿!

仗义的洛谷更是把这里加了大码:


P1001 A+B Problem
题目背景
不熟悉算法竞赛的选手请看这里:
算法竞赛中要求的输出格式中,不能有多余的内容,这也包括了“请输入整数 和 ”这一类提示用户输入信息的内容。若包含了这些内容,将会被认为是 Wrong Answer,即洛谷上的 WA。在对比代码输出和标准输出时,系统将忽略每一行结尾的空格,以及最后一行之后多余的换行符。
若因此类问题出现本机似乎输出了正确的结果,但是实际提交结果为错误的现象,请勿认为是洛谷评测机出了问题,而是你的代码中可能存在多余的输出信息。用户可以参考在题目末尾提供的代码。
此外,请善用 IDE 模式,以避免不同平台的评测产生差异。
最后,请不要在对应的题目讨论区中发布自己的题解,请发布到题解区域中,否则将处以删除或禁言的处罚。若发现无法提交题解则表明本题题解数量过多,仍不应发布讨论。若您的做法确实与其他所有题解均不一样,请联系管理员添加题解。
在学术版与题目总版内发帖、回复需要达到 受信任的用户 的权限,在洛谷经常做题、参与比赛即可快速达到该权限等级。
题目描述
输入两个整数 ,输出它们的和。
注意:
- Pascal 使用
integer会爆掉哦! - 有负数哦!
- C/C++ 的
main函数必须是int类型。程序正常结束时的返回值必须是0。这不仅对洛谷其他题目有效,而且也是 NOIP/CSP/NOI 比赛的要求!
好吧,同志们,我们就从这一题开始,向着大牛的路进发。
任何一个伟大的思想,都有一个微不足道的开始。
输入格式
输入两个以空格分隔的整数 。
输出格式
输出一个整数,表示 。
输入输出样例 #1
输入 #1
20 30
输出 #1
50
说明/提示
数据范围
对于所有测试数据,。
广告
洛谷出品的算法教材,帮助您更简单地学习基础算法。【官方网店绝赞热卖中!】>>>
本题各种语言的程序范例:
C
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n", a+b);
return 0;
}
C++
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
cout << a+b << endl;
return 0;
}
Pascal
var a, b: longint;
begin
readln(a,b);
writeln(a+b);
end.
Python 3
s = input().split()
print(int(s[0]) + int(s[1]))
Java
import java.io.*;
import java.util.*;
public class Main {
public static void main(String args[]) throws Exception {
Scanner cin=new Scanner(System.in);
int a = cin.nextInt(), b = cin.nextInt();
System.out.println(a+b);
}
}
JavaScript(Node.js)
const fs = require('fs')
const data = fs.readFileSync('/dev/stdin')
const result = data.toString('ascii').trim().split(' ').map(x => parseInt(x)).reduce((a, b) => a + b, 0)
console.log(result)
process.exit() // 请注意必须在出口点处加入此行
Ruby
a, b = gets.split.map(&:to_i)
print a+b
PHP
<?php
$input = trim(file_get_contents("php://stdin"));
list($a, $b) = explode(' ', $input);
echo $a + $b;
Rust
use std::io;
fn main(){
let mut input=String::new();
io::stdin().read_line(&mut input).unwrap();
let mut s=input.trim().split(' ');
let a:i32=s.next().unwrap()
.parse().unwrap();
let b:i32=s.next().unwrap()
.parse().unwrap();
println!("{}",a+b);
}
Go
package main
import "fmt"
func main() {
var a, b int
fmt.Scanf("%d%d", &a, &b)
fmt.Println(a+b)
}
C# Mono
using System;
public class APlusB{
private static void Main(){
string[] input = Console.ReadLine().Split(' ');
Console.WriteLine(int.Parse(input[0]) + int.Parse(input[1]));
}
}
Kotlin
fun main(args: Array<String>) {
val (a, b) = readLine()!!.split(' ').map(String::toInt)
println(a + b)
}
Haskell
main = do
[a, b] <- (map read . words) `fmap` getLine
print (a+b)
Lua
a = io.read('*n')
b = io.read('*n')
print(a + b)
OCaml
Scanf.scanf "%i %i\n" (fun a b -> print_int (a + b))
Julia
nums = map(x -> parse(Int, x), split(readline(), " "))
println(nums[1] + nums[2])
Scala
object Main {
def main(args: Array[String]): Unit = {
import java.util.Scanner
val cin = new Scanner(System.in)
val a = cin.nextInt()
val b = cin.nextInt()
System.out.println(a + b)
}
}
Perl
my $in = <STDIN>;
chomp $in;
$in = [split /[\s,]+/, $in];
my $c = $in->[0] + $in->[1];
print "$c\n";
我建议把C++的示例代码改成于 FFT 高精度大整数类

下边则是一条新闻快报


好了!本期帖子就到这里!下期再见!
麻烦各位大佬点点关注,我尽快更新!(备注:该帖子将在114514年后更新,一个关注少一年
)
这里空空如也






















有帮助,赞一个