Debug
真不知道为啥博客园的文件更新不上去……
Windows
#include<bits/stdc++.h>
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* debug.h
* Author: M
* Update Date:11/06/19 10:23
* Description:for debug ,don'to submit cpps with it(you will CE)!!!
For windows
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#define ENDL puts("")
#define debug cout
#define STOP_1 pause()
#define STOP_2 pause(1000)
#define BIGW system("mode con cols=1000 lines=1000")
#define SMALLW system("mode con cols=80 lines=30")
#define MIDW system("mode con cols=100 lines=100")
#define NL endl
#define TL "\r"
#define TAB "\t"
#define SP " "
#define STDLINE "------------------------------------------------------------\n"
#define CTIME atexit(STDTIMEOUT)
using namespace std;
void STDTIMEOUT(){
const string l(32,'-'); //--------------------------------
cout<<NL<<l<<NL;
printf("Finished in %10dms\n",clock());
}
string bin(int number,int length_of_out){
string zeros(length_of_out,'0');
if(!number)return zeros;
string number_bin;
while(number){
if(number&1)number_bin+='1';
else number_bin+='0';
number>>=1;
}
while(number_bin.length()<length_of_out)number_bin=number_bin+"0";
reverse(number_bin.begin(),number_bin.end());
return number_bin;
}
string bits_27(int number,int length_of_out){
string zeros(length_of_out,'_');
if(number==0)return zeros;
string number_bits_27;
while(number>0){
if(number%27==0){
number_bits_27+=' ';
}
else number_bits_27+=number%27+'A'-1;
number/=27;
}
while(number_bits_27.length()<length_of_out)number_bits_27=number_bits_27+'_';
reverse(number_bits_27.begin(),number_bits_27.end());
return number_bits_27;
}
inline void pause(){
while(1);
}
void pause(int time_ms){
int from_time=clock();
while(clock()-from_time<=time_ms);
}
void pause(const char* title){
cout<<title;
system("pause");
}
bool openfile(string fileout,string filein){
if(!freopen(filein.c_str(),"r",stdin)){
cout<<"No file named "+filein<<endl;
fclose(stdin);
fclose(stdout);
return false;
}
freopen(fileout.c_str(),"w",stdout);
return true;
}
bool closefile(){
if(fclose(stdin)&&fclose(stdout))return 1;
return 0;
}
template<typename T>
void pour(stack <T> x,int width){
stack <T> data;
if(x.empty()){
cout<<"empty\n";
}
while(!x.empty()){
int r=x.top();
cout<<setw(width)<<r;
x.pop();
}
}
template <typename Tp>
void savein(string dn,Tp type,string OutTypeN){
fstream sout;
sout.open(dn.c_str(),ios_base::out|ios_base::app);
sout<<OutTypeN<<": "<<type<<endl;
sout.close();
}
template <typename T>
void pour(vector <T> x,int width,const char *title){
cout<<title<<":";
T* b=x.begin(),e=x.end();
for(T* i=b;i<=e;i++){
cout<<setw(width)<<*i;
}
}
template <typename Tp>
void pour(Tp Arrayname,int cols_from,int cols_to,int line_from,int line_to,int width,const char *title){
cout<<title<<"Array[i][j]:\n"<<setw(width)<<"*"<<":";
for(int i=line_from;i<=line_to;i++)cout<<setw(width)<<i;ENDL;
for(int i=cols_from;i<=cols_to;i++){
cout<<setw(width)<<i<<":";
for(int j=line_from;j<=line_to;j++){
cout<<setw(width)<<Arrayname[i][j];
}
ENDL;
}
}
string Bot(bool bool_type){
if(bool_type)return "true";
return "false";
}
template <typename Tp>
void pour(Tp Array,int from,int to,int width,const char* title){
cout<<setw(width)<<title<<":";
for(int i=to;i>=from;i--){
cout<<setw(width)<<Array[i];
}
ENDL;
}
template <typename Tp>
void pour(deque <Tp> _deque,int width,const char *title,const char *_mode){
cout<<setw(width)<<title<<":";
try{
switch(_mode[0]){
case 'f':
case 'F':
if(_deque.empty())
cout<<"Emtpy";
else
while(!_deque.empty()){
cout<<setw(width)<<_deque.front();
_deque.pop_front();
}
break;
case 'B':
case 'b':
if(_deque.empty())
cout<<"Emtpy";
else
while(!_deque.empty()){
cout<<setw(width)<<_deque.back();
_deque.pop_back();
}
break;
default:
throw "Mode Error\nOnly Have \"Front\" or \"Back\"";
break;
}
}
catch(const char* exp){
cout<<"\nTip:"<<exp<<endl;
}
ENDL;
}
template<typename Tp>
void pour(queue <Tp> _queue,int width,const char *title){
cout<<setw(width)<<title<<":";
if(_queue.empty())
cout<<"Empty";
else
while(!_queue.empty()){
cout<<setw(width)<<_queue.front();
_queue.pop();
}
ENDL;
}
Linux
/*
* debug.h
*
* Copyright (C) 2019 - Miemeng
*
* debug.h is free; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* debug.h is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with . If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------
>Before you use it ,you need to know...
* Name:debug.h
* Author: Miemeng
* Update Date:15/09/19
* Description: + For debug ,Don't submit your codes with:
- #include "debug.h"
+ This is a version for Linux
+ Latest Update
- Counters
- Some Small Details ;)
- Some limits for C++11
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef DEBUG_H
//For redefination
#define DEBUG_H
#include <bits/stdc++.h>
#define ENDL std::cerr<<std::endl
#define debug std::cerr
#define STOP_1 pause()
#define STOP_2 pause(1000)
#define NL "\n"
#define TL "\r"
#define TAB "\t"
#define SP " "
#define CTIME atexit(STDTIMEOUT)
#define name(k) #k
#define Out(k) std::cerr<<name(k)<<":"<<k<<std::endl
#define STDLINE "-----------------------------------------"
/*
This Namespace contains some var for Debug.
So you can change them to custom your Codes.
*/
namespace Debug_var{
std::string True("true"),False("false"),
leftBracket("("),rightBracket(")");
}
void STDTIMEOUT();
class Warranty_t{
public:
Warranty_t(const char* warning){
std::cerr<<"[WARNING]:"<<warning<<std::endl;
}
};
/*
This will remind you of this header.
So you will not submit your code with it ;)
*/
const Warranty_t Pub_warning("You Are Using The Header \"debug.h\"");
class timer{
public:
timer(){
CTIME;
}
};
/*
This is a timer that runs when the program stops.
*/
const timer stdtimer;
class Counter{
int Count_number;
std::string Name;
public:
Counter(const char *st){
Count_number=0;
Name=st;
}
~Counter(){
std::cerr<<"[NOTE]:The Counter("\
<<this->Name\
<<") Runs "\
<<std::setw(8)<<this->Count_number\
<<" times"<<std::endl;
}
int operator () (void){
this->Count_number++;
return this->Count_number;
}
};
using namespace std;
/*
Turn int to string
*/
std::string intstr(int int_var){
stringstream ss;
string res;
ss<<int_var;
ss>>res;
return res;
}
/*
Turn bin int to a string
for your dp.
*/
std::string int_toseq(int int_var,int minBit,int maxBit){
std::string str;
for(int id_1=minBit;id_1<=maxBit;id_1++){
int id_2=1<<id_1;
if(int_var&id_2)str+=Debug_var::leftBracket;
else str+=SP;
str+=intstr(id_1);
if(int_var&id_2)str+=Debug_var::rightBracket;
else str+=SP;
}
return str;
}
std::string int_toseq(int int_var,int minBit,int maxBit,int _delta_t){
//A version for different beginning
std::string str;
for(int id_1=minBit;id_1<=maxBit;id_1++){
int id_2=1<<(id_1-_delta_t);
if(int_var&id_2)str+=Debug_var::leftBracket;
else str+=SP;
str+=intstr(id_1);
if(int_var&id_2)str+=Debug_var::rightBracket;
else str+=SP;
}
return str;
}
/*
This function prints
a increasing number.
*/
void t_counter(){
static int times=0;
std::cerr<<"#"
<<++times<<"Runs"<<std::endl;
}
/*
Turn bool to a string .
*/
string Bot(bool bool_type){
if(bool_type)return Debug_var::True;
return Debug_var::False;
}
/*
The time output.
When you use it,you will get a time output
*/
void STDTIMEOUT(){
std::cerr<<NL<<STDLINE<<NL;
std::cerr<<"Runing Time:"<<setw(10)<<clock()/1000.0<<" ms";
std::cerr<<NL<<STDLINE<<NL;
}
/*
Return a value you need.
*/
template <typename Tp>
Tp In(Tp &Type){
std::cin>>Type;
return Type;
}
#if __cplusplus >= 201103
template <typename Tp=int>
#else
template <typename Tp>
#endif
Tp getval(){
Tp k;
std::cin>>k;
return k;
}
/*
Turn a DEC number to BIN
*/
string bin(int number,unsigned int length_of_out){
string zeros(length_of_out,'0');
if(!number)return zeros;
string number_bin;
while(number){
if(number&1)number_bin+='1';
else number_bin+='0';
number>>=1;
}
while(number_bin.length()<length_of_out)number_bin=number_bin+"0";
reverse(number_bin.begin(),number_bin.end());
return number_bin;
}
/*
Pause;
*/
inline void pause(){
std::cerr<<"Paused"<<std::endl;
while(1);
}
void pause(int time_ms){
time_t from_time=clock();
while(clock()-from_time<=time_ms*1000);
}
/*
Quick freopen
*/
bool openfile(string filein,string fileout){
if(!freopen(filein.c_str(),"r",stdin)){
std::cerr<<"No file named "+filein<<std::endl;
fclose(stdin);
fclose(stdout);
return false;
}
freopen(fileout.c_str(),"w",stdout);
return true;
}
/*
Quick fclose
*/
bool closefile(){
if(fclose(stdin)&&fclose(stdout))return 1;
return 0;
}
/*
Pours
*/
#if __cplusplus >= 201103
template<typename Tp>
void pour(Tp _type,int width,const char *title){
std::cerr<<title<<":";
for(auto _it:_type){
std::cerr<<setw(width)<<_it;
}
ENDL;
}
template<typename Tp,typename Outer>
void pour(Tp _type,Outer _out,const char *title){
std::cerr<<title<<":";
for(auto _it:_type){
_out(_it);
}
puts(STDLINE);
}
#endif
template<typename T>
void pour(stack <T> x,int width){
stack <T> data;
if(x.empty()){
std::cerr<<"empty\n";
}
while(!x.empty()){
int r=x.top();
std::cerr<<setw(width)<<r;
x.pop();
}
}
template <typename Tp>
void savein(string FIle_Name,Tp type,string OutTypeN){
fstream sout;
sout.open(FIle_Name.c_str(),ios_base::out|ios_base::app);
sout<<OutTypeN<<": "<<type<<std::endl;
sout.close();
}
template <typename Tp>
void pour(Tp Arrayname,int cols_from,int cols_to,int line_from,int line_to,int width,const char *title){
std::cerr<<title<<"_Array[][]:"<<std::endl<<setw(width)<<"*"<<":";
for(int id=line_from;id<=line_to;id++)std::cerr<<setw(width)<<id;ENDL;
for(int id_1=cols_from;id_1<=cols_to;id_1++){
std::cerr<<setw(width)<<id_1<<":";
for(int id_2=line_from;id_2<=line_to;id_2++){
std::cerr<<setw(width)<<Arrayname[id_1][id_2];
}
ENDL;
}
}
template <typename Tp>
void pour(Tp Array,int from,int to,int width,const char* title){
std::cerr<<setw(width)<<title<<":";
for(int id=from;id<=to;id++)
std::cerr<<setw(width)<<Array[id];
ENDL;
}
template <typename Tp,typename Out_Func>
void pour(Tp Array,int from,int to,Out_Func _out,const char *title){
std::cerr<<title<<":"<<std::endl;
for(int id=from;id<=to;id++)
_out(Array[id]);
ENDL;
}
template <typename Tp>
void pour(deque <Tp> _deque,int width,const char *title,const char *_mode){
std::cerr<<setw(width)<<title<<":";
try{
switch(_mode[0]){
case 'f':
case 'F':
if(_deque.empty())
std::cerr<<"Emtpy";
else
while(!_deque.empty()){
std::cerr<<setw(width)<<_deque.front();
_deque.pop_front();
}
break;
case 'B':
case 'b':
if(_deque.empty())
std::cerr<<"Emtpy";
else
while(!_deque.empty()){
std::cerr<<setw(width)<<_deque.back();
_deque.pop_back();
}
break;
default:
throw "Mode Error\nOnly Have \"Front\" or \"Back\"";
break;
}
}
catch(const char* exp){
std::cerr<<"\n[ERROR]:"<<exp<<std::endl;
}
ENDL;
}
template<typename Tp>
void pour(queue <Tp> _queue,int width,const char *title){
std::cerr<<setw(width)<<title<<":";
if(_queue.empty())
std::cerr<<"Empty";
else
while(!_queue.empty()){
std::cerr<<setw(width)<<_queue.front();
_queue.pop();
}
ENDL;
}
#endif
Miemeng真的蒻

浙公网安备 33010602011771号