头像

ghb_zZZ

专业摸鱼组




离线:2天前


最近来访(23)
用户头像
purejames
用户头像
汐若
用户头像
怡红院
用户头像
Space_K
用户头像
我是sun
用户头像
染染
用户头像
optimjie
用户头像
杰罗尼莫
用户头像
jinyc
用户头像
实体Him
用户头像
注册信息
用户头像
Aigrl
用户头像
leoma
用户头像
小飞龙
用户头像
梦惊醒
用户头像
yanwamwam
用户头像
cht
用户头像
ていとももしょう
用户头像
aaa辰
用户头像
LZ_2


ghb_zZZ
5天前
#include <iostream>
using namespace std;

int n;

void dfs(int u, int state) {
    if (u == n) {
        for (int i = 0; i < n; i ++)
            if (state >> i & 1)
                cout << i + 1 << " ";
            cout << endl;
        return ;
    }
    dfs (u + 1, state);
    dfs (u + 1, state | (1 << u));
}

int main() {
    cin >> n;
    dfs(0, 0);
    return 0;
}



ghb_zZZ
5天前
#include <iostream>
using namespace std;

int n;

void dfs(int u, int state) {
    if (u == n) {
        for (int i = 0; i < n; i ++)
            if (state >> i & 1)
                cout << i + 1 << " ";
            cout << endl;
        return ;
    }
    dfs (u + 1, state);
    dfs (u + 1, state | (1 << u));
}

int main() {
    cin >> n;
    dfs(0, 0);
    return 0;
}


活动打卡代码 AcWing 90. 64位整数乘法

ghb_zZZ
5天前
#include <iostream>
using namespace std;

unsigned long long a, b, p, ans;

int main() {
    cin >> a >> b >> p;
    while (b) {
        if (b & 1) {
            ans = (ans + a) % p;
        }
        a = a * 2 % p;
        b >>= 1;
    }
    cout << ans << endl;
    return 0;
}


活动打卡代码 AcWing 90. 64位整数乘法

ghb_zZZ
5天前
#include <iostream>
using namespace std;

unsigned long long a, b, p, ans;

int main() {
    cin >> a >> b >> p;
    while (b) {
        if (b & 1) {
            ans = (ans + a) % p;
        }
        a = a * 2 % p;
        b >>= 1;
    }
    cout << ans << endl;
    return 0;
}


活动打卡代码 AcWing 89. a^b

ghb_zZZ
6天前
#include <iostream>
using namespace std;
int main() {
    unsigned long long a, b, p;
    cin >> a >> b >> p;
    unsigned long long ans = 1;
    while (b) {
        if (b & 1) {
            ans = ans * 1ll * a % p;
        }
        a = a * 1ll * a % p;
        b >>= 1;
    }
    cout << ans % p << endl;
    return 0;
}


新鲜事 原文

ghb_zZZ
7天前
图片


分享 OI小课堂

ghb_zZZ
8天前



ghb_zZZ
9天前

[CSP-J2019] 公交换乘 原题

鉴于本人实力过低,代码只在O2优化下AC QAQ
此系列并非题解或讲解(你愿意看我也不制止,就是不一定能看懂),只是自己留着看

#include <bits/stdc++.h>
using namespace std;

const int N = 100005;
int n, price, time_go, cost_all, trans_choose, ticket_num;
struct ticket {
    int end_time;
    bool ticket_used = true; //没有票或用过的票都为true 
    int ticket_worth;
};
ticket have_ticket[N];

void test() {
    cout << endl;
    for (int i = 0; i < ticket_num; i++) {
        cout << have_ticket[i].ticket_used << " " << have_ticket[i].end_time << endl;
    }
    cout << cost_all << endl << endl;
    return;
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> trans_choose >> price >> time_go;
        if (trans_choose == 0) { //乘地铁 
            have_ticket[ticket_num].ticket_used = false; //获得一张票 
            have_ticket[ticket_num].end_time = time_go + 45; //计算过期时间 
            have_ticket[ticket_num].ticket_worth = price;
            ticket_num++;
            cost_all += price;
        } else { //乘公交 
            bool use_ticket = false;
            if (i == 0) { //特判 
                cost_all += price;
            } else {
                for (int j = 0; j < ticket_num; j++) {
                    if (!have_ticket[j].ticket_used) { //找到最早的没用过且没过期的票 
                        if (have_ticket[j].end_time < time_go) { //如果过期了标记为true 
                            have_ticket[j].ticket_used = true;
                        } else { //票还能用 
                            if (have_ticket[j].ticket_worth >= price) {
                                have_ticket[j].ticket_used = true; //使用这张票 
                                use_ticket = true;
                                break;
                            }
                        }
                    }
                }
                if (!use_ticket) {
                    cost_all += price;
                }
            }
        }
        //test();
    }
    cout << cost_all << endl;
    return 0;
}


新鲜事 原文

ghb_zZZ
30天前
CSP-J/S rp+++++++ QAQ



ghb_zZZ
1个月前

以前的文章从题解转载到分享,看过的可以退出了QAQ
Hello!大家好!
今天我们来整理一下string字符串类型的内容

头文件

对于一个独立的变量类型来说,头文件当然是必不可少的;
string类型在c++中有两个头文件,一个是 #icnlude <string> 另一个是 #include <cstring> 这两个都可以使用,详细的区分可以去 https://www.cplusplus.me/1786.html

#include <string>
#include <cstring>
#include <string.h>
#include <bits/stdc++> //string也当然包括在万能头里;

using namespace std;
int main() {

    return 0;
}

声明&定义

string的声明很简单,只是“string + 变量名”就可以了;

#include <iostream>
#include <string> //三种头文件都可以,本文中都统一使用string(我是绝对不会告诉你是因为短,写的快的)
using namespace std;
int main() {

    string s;

    return 0;
}

输入&输出

string的输入输出也没有任何特别之处,就是标准的输入(cin)输出(cout)即可;当然,由于是一个字符“串”所以使用循环来依次输出每一位当然也是没问题的,尤其是在题目要求对字符串中每一位进行一定更改时,但由于这里需要用到c+ +设置好的头文件中的函数,所以我们后面一起说。
但接下来问题又来了,当题目要求需要输入带空格的字符串时我们又该怎么办呢,由于c+ +语言中,编译器会自动认定空格前后是两个不同的变量,所以正常的输入肯定是不能用了,这时候就需要用到一些特别的输入方法了,这里给大家介绍一个方法: getline
首先看名字就差不多可以知道他的用途:get是拿,取;line是行。直面意思就是取(读入)这一行中的内容;那么他的作用也是这样。直接读入这一行中所有的内容,没错,就是这么豪横。
使用方法嘛,也不难: getline(cin, s(变量名,以s为例))

#include <iostream>
#include <string> //头文件少不了
using namespace std;
int main() {
    string s; //用前声明
    cin >> s; //标准输入
    cout << s; //标准输出
    return 0;
}
#inlcude <iostream>
#include <string> //头文件不能忘
using namespace std;
int main() {
    string s; //用前声明
    getlin(cin, s); //getline它来了
    cout << s; //标准输出就可以,花里胡哨的放在后面;
    return 0;
}

取位

string作为一个字符“串”类型,自然有”位”的存在,string类型中的位数与数组等一样,从0开始计数;
当我们想取到当中的第x位时,只需用s[x]就可以了;

#include <iostream>
#include <string>
using namespace std;
int main() {
    string s; //声明一个字符串s
    int x; //声明一个int类型,用来存需要输出的位数;
    cin >> s >> x; //输入这两个变量
    cout << s[x]; //输出这一位
    return 0;
}

s.size()/s.length的使用

这里来说说这个 s.size()
s.size()是string类型中非常常用的一个函数,与其他.size()用法一样,就是这个变量的位数,这也是上面循环遍历每一位的必要内容,同时还要注意,遍历时要从0到s.size() - 1计;
s.length完全相同

#include <iostream>
#include <string>
using namespace std;
int main() {
    string s; //声明这个字符串类型变量
    cin >> s; //输入他
    for (int i = 0; i < s.size(); i++) { //做一个循环,从0开始,<s.size()结束,不能加=
        cout << s[i]; //这里可以对每一位按题目要求进行改动,这里就简单输出了
    }
    return 0;
}

小测验

上面的内容都掌握了吗,我们来试一道小题!


题目描述:
输入一个字符串(可能带空格),输出原文,第N位,倒序输出原文字母大小写转换的结果;

输入格式:
共2行;
第一行一个字符串;
第二行一个整数N

输出格式:
三行
第一行输入字符串的原文;
第二行输入字符串的第N位;
第三倒序输出原文字母大小写转换的结果;

样例输入:
Hello World!
7

样例输出:
Hello World!
W
!DLROw OLLEh

这里推荐自己先做一下,下面是题解

#include <iostream>
#include <string> //首先头文件不能少
using namespace std;
int main() {
    string s; //声明string变量
    int n; //声明位数n
    getline(cin, s); // 用getline输入带空格的字符串
    cin >> n; // 输入要求的位数n
    cout << s << endl;// 输出原文
    cout << s[n - 1] << endl; // 输出要求的第n位,但由于从0计位,所以比正常位数少1位
    for (int i = s.size() - 1; i >= 0; i--) { // 倒序循环,从s.size() - 1开始,到0结束
        if (s[i] >= 'a' && s[i] <= 'z') { // 判断如果是小写字母
            s[i] = s[i] - 'a' + 'A'; // 让这一位变成大写
        } else if (s[i] >= 'A' && s[i] <= 'Z') { // 如果是大写字母
            s[i] = s[i] - 'A' + 'a'; // 让这一位变成小写
        }
        cout << s[i]; // 输出这一位
    }
    return 0;
}

各位大佬,有误勿喷
%%%%%