Блог пользователя Massiv4k

Автор Massiv4k, 8 месяцев назад, По-русски

Ну короче мне стало скучно, и я решал написать шаблончик на все случаи жизни

Но так как я чуть чуть тупее деревянного бруска ( а может и не чуть чуть ), то сам я конечно написать не особо смог

Подскажите пж что можно добавить, или наоборот я переборщил........

#include <bits/stdc++.h>
using namespace std;
//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt")
//#pragma GCC optimize("03")
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using tiii = tuple<int, int, int>;
using vvi = vector<vector<int>>;
using vvll = vector<vector<long long>>;
using vvvi = vector<vector<vector<int>>>;

#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define fast() {ios::sync_with_stdio(0); cin.tie(0);}
#define pb push_back
#define yes() { cout<<"YES\n"; }
#define no() { cout<<"NO\n"; }
#define gv(v,n) for ( int i = 0; i < (n); i++) cin >> v[i];
#define endl '\n'
#define fi first
#define se second
#define mp make_pair
#define lb lower_bound
#define ub upper_bound

// ---------------types-----------------//

#define shrt short // -32768...32767
#define ushirt unsigned short//0..65535
#define uint unsigned int // 0.. 4294967295
#define ull unsigned long long //0.. 18446744073709551615
#define ldou long double // ну там много крч
//int128_t 10e35 !!!!!

typedef vector<int> vi;
typedef vector<long long> vll;
typedef vector<string> vstr;
typedef vector<char> vch;
typedef vector<double> vd;
typedef vector<vector<pair<int,int>>> vvpii;
typedef vector<pair<int,int>> vii;
typedef vector<pair<long long, long long>> vllll;

//--------------const----------------//

const int INF = 1e9 + 10;
const int MAX_SIZE = 1e5 * 2 + 100;
const ll MOD = 1e9+7;
const ll INFLL = 1e18;
const double EPS = 1e-9;


//-------------int128---------------//
#define i128 __int128
// ввод int128
istream& operator>>(istream& in, i128& n) {
    string s; in >> s;
    n = 0; bool neg = s[0] == '-';
    for (size_t i = neg; i < s.size(); i++)
        n = n * 10 + (s[i] - '0');
    if (neg) n = -n;
    return in;
}

// вывод int128
ostream& operator<<(ostream& out, i128 n) {
    if (n == 0) return out << '0';
    if (n < 0) { out << '-'; n = -n; }
    string s; while (n) { s += '0' + n % 10; n /= 10; }
    reverse(s.begin(), s.end());
    return out << s;
}



bool multitests = 0;
//#define DIALL
#define DEBUG



// --------------DEBUG------------------//
#ifdef DEBUG
    #define debug(x) cout << #x << " = " << x << endl
    #define debug2(x, y) cout << #x << " = " << x << ", " << #y << " = " << y << endl
    #define debugv(v) { cout<< #v << " = "<<' '; for ( int i = 0; i < (v).size();i ++) cout<<v[i]<<' ';}
#else
    #define debug(x)
    #define debug2(x, y)
    #define debugv(v)
#endif


/*   /\_/\                                  /\_/\
*   (= ._.)   //ACTUAL CODE START HERE//   (._. =)
**  / >   \>                               </  < \
*/

void s(){
    fast();
    
    
    
}

/*   /\_/\                               /\_/\
*   (= ._.)   //ACTUAL CODE END HERE//  (._. =)
**  / >   \>                            </  < \
*/

signed main(){
    fast();
    #ifdef DIALL
      freopen("input.txt", "r", stdin);
      freopen("output.txt", "w", stdout);
    #endif
    if (multitests){
        int t;
        cin >> t;

        while ( t --){
            s();
        }
    }else{
        s();
    }
    return 0;
}

Заранее спасибо !

Всех с 2026 !!!! )

  • Проголосовать: нравится
  • -2
  • Проголосовать: не нравится

»
8 месяцев назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится

как будто #define endl '\n' не нужен даже

»
8 месяцев назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

По типам данных можешь добавить такие штуки:

using tiii = tuple<int, int, int>;
using vvi = vector<vector<int>>;
using vvvi = vector<vector<vector<int>>>;
using si = set<int>;
using msi = multiset<int>;

Вроде бы довольно удобно. Еще можешь такие штуки добавить:

#define re return
#define con continue
#define lb lower_bound
#define ub upper_bound

Еще я у тебя не заметил дефайн на обратный форик (обычный у тебя обозначен как gv). У меня обратный выглядит вот так:

#define rrep(i, j, n) for (int i = (j); i >= (n); --i)

Еще у тебя нет считывания массивов и пар в одну строчку (как это написать можешь у меня в любой посылке посмотреть, раздел TEMPLATES). Это очень удобная штука, которая позволяет в сумме много времени экономить.

Еще я у тебя не заметил pbds (это штука, в которой лежит gp_hash_table и структура, которую для ordered_set используют). Советую тоже добавить. Добавить можно вот так:

#include <ext/pb_ds/assoc_container.hpp>
 
using namespace __gnu_pbds;

Еще можешь добавить функцию, которая возвращает время исполнения программы (ну и типа после функции solve выводить время в дебаг принт). У меня такая функция реализована следующим образом:

double getTime() {
    return clock() / (double)CLOCKS_PER_SEC;
}

Еще я не увидел прагмы. Ну вообще, наверное, тебе пока не надо знать углубленно, как ими нормально пользоваться. Но можешь добавить в код следующую строчку, и она довольно часто будет немного ускорять твой код:

#pragma GCC optimize("unroll-loops,Ofast")

В целом это основные советы, но ты можешь мне или Матвейчику в лс написать, если нужно еще что-то рассказать

»
8 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Единственный недостаток: а что если будет несколько массивов long double как ты будешь их различать? Надо будет придумывать более осмысленные названия.

»
8 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

ты легенда

»
8 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

ссигма

»
7 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

товарищ еще можешь добавить пару библиотке на всякий случай