头像

Lss_lmj




离线:4小时前


最近来访(50)
用户头像
二十四_5
用户头像
Aaron_luomiao
用户头像
lzxzz
用户头像
cba
用户头像
Backspac
用户头像
._565
用户头像
Lakersilk
用户头像
CYMario
用户头像
HH123_
用户头像
Zzz_56
用户头像
封禁用户
用户头像
wzn0410
用户头像
Bug-Free
用户头像
xxxibgdrgn
用户头像
MKurisu
用户头像
K2MnO4
用户头像
种花家的小兔子
用户头像
PopeJoe
用户头像
白墙
用户头像
小陌白

活动打卡代码 AcWing 3292. 称检测点查询

Lss_lmj
2天前
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 210;

int n, X, Y;
struct Point
{
    int x, y, d;
    int id;
    bool operator< (const Point& t) const
    {
        if (d != t.d) return d < t.d;
        return id < t.id;
    }
}q[N];

int get_dist(int x1, int y1, int x2, int y2)
{
    int dx = x1 - x2;
    int dy = y1 - y2;
    return dx * dx + dy * dy;
}

int main()
{
    cin >> n >> X >> Y;
    for (int i = 0; i < n; i ++ )
    {
        int x, y;
        cin >> x >> y;
        q[i] = {x, y, get_dist(X, Y, x, y), i + 1};
    }
    sort(q, q + n);
    for (int i = 0; i < 3; i ++ ) cout << q[i].id << endl;
    return 0;
}




Lss_lmj
2天前
struct Point
{
    int x, y, d;
    int id;
    bool operator< (const Point& t) const
    {
        if (d != t.d) return d < t.d;
        return id < t.id;
    }
}q[N];



Lss_lmj
2天前
std::deque<int> dq; //创建一个empty的int型队列
std::deque<int> dq(8);  //创建一个有8个元素的int型队列,默认初始化值(value)为0
std::deque<int> dq(8, 50);  //创建一个有8个元素的int型队列,默认初始化值(value)都设为50
std::deque<int> dq(dq.begin(), dq.end()); //通过迭代器创建队列
std::deque<int> dq1(dq);    //通过拷贝构造创建队列

push_back();    //在队列末尾增加一个元素, 参数为拷贝或移动的元素
push_front();   //在队列头部增加一个元素,参数可以是拷贝或移动的元素
emplace();      //在队列指定的元素位置前插入新的元素
emplace_back(); //在队列尾部增加新的元素
emplace_front();// 在队列头部增加新的元素
insert();       //在队列莫一元素前增加新的元素

pop_front() //从队列头部移除第一个元素
pop_back()  //从队列尾部移除最末尾的元素
erase(); //从队列指定的元素位置删除元素,可以指定一个范围删除。
clear();    //清空队列所有元素,size将为0

at()        // 在队列中返回指定索引元素的引用
front()     // 在队列中返回头部第一个元素的引用
back()      //在队列中返回尾部最后一个元素的引用
size()      //返回队列中元素的个数
max_size()  //返回队列最大容量
resize()    // 重新扩展容器大小, 如果重新扩展的容量小于现在的容量,多出的将会丢失,如果大于现在的容量,将会在现在容量的基础进行扩充并以0填充默认值

#include <iostream>
#include <deque>

int main() {
    std::deque<int> dq;

    dq.emplace_back(10);    // 10
    dq.emplace_back(20);    // 10, 20
    std::cout << dq.size() << std::endl;    // 2
    dq.front() = 100;   // 引用重新赋值 10->100
    dq.back() = 200; //引用重新赋值 20-> 200
    for(int i=0; i< dq.size(); i++)
        std::cout << dq.at(i) << " ";   // 100, 200
    std::cout << '\n';
    // 扩展容量大小到5, 当前容量为2,将再增加3个元素并以0填充初始值
    dq.resize(5); // 100, 200, 0, 0, 0
}



活动打卡代码 AcWing 3293. 风险人群筛查

Lss_lmj
2天前
#include <iostream>
#include <cstring>
#include <algorithm>

#define x first
#define y second

using namespace std;

typedef pair<int, int> PII;

int n, k, t, x1, y1, x2, y2;

int main()
{
    cin >> n >> k >> t >> x1 >> y1 >> x2 >> y2;

    int res1 = 0, res2 = 0;
    while (n -- )
    {
        bool r1 = false, r2 = false;
        int s = 0;
        for (int i = 0; i < t; i ++ )
        {
            int x, y;
            cin >> x >> y;
            if (x >= x1 && x <= x2 && y >= y1 && y <= y2)
            {
                s ++ ;
                r1 = true;
                if (s >= k) r2 = true;
            }
            else s = 0;
        }
        if (r1) res1 ++ ;
        if (r2) res2 ++ ;
    }
    cout << res1 << endl << res2 << endl;
    return 0;
}





Lss_lmj
3天前

题目描述

给两个偶数x和y,找到n满足n%x == y%n

思路

  • 分类找特殊情况。一般而言我们猜测n%x=y%n这个式子的值是0或者y之类比较特殊的,然后再猜测n的表达式

  • x==y,则n取x

  • x>y时,(x+y)%x == y,y%(x+y) == y,所以n取x+y
  • x<y时,不妨将x想象很小,y想象很大,然后n%x就是1个n比若干个x多出来的部分,y%n就是1个y比若干个n多出来的部分,在数轴上发现如下性质

02.png

C++ 代码

#include <iostream>

using namespace std;

typedef long long ll;

int main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

    int _;
    cin >> _;

    while (_ -- )
    {
        ll x, y;
        cin >> x >> y;
        if (x == y) cout << x << endl;
        else if (x > y) cout << x + y << endl;
        else cout << y - y % x / 2 << endl;
    }

    return 0;
}
 


活动打卡代码 AcWing 3200. 无线网络

Lss_lmj
5天前
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>

#define x first
#define y second

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;
const int N = 210, M = N * N;

int n, m, k, r;
int h[N], e[M], ne[M], idx;
PII p[N];
int dist[N][N];

bool check(PII a, PII b)
{
    LL dx = a.x - b.x;
    LL dy = a.y - b.y;
    return dx * dx + dy * dy <= (LL)r * r;
}

void add(int a, int b)
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}

int bfs()
{
    queue<PII> q;
    q.push({1, 0});
    memset(dist, 0x3f, sizeof dist);
    dist[1][0] = 0;

    while (q.size())
    {
        auto t = q.front();
        q.pop();

        for (int i = h[t.x]; ~i; i = ne[i])
        {
            int x = e[i];
            int y = t.y;//经过点的数目  
            if (x > n) y ++ ;
            if (y <= k)
            {
                if (dist[x][y] > dist[t.x][t.y] + 1)
                {
                    dist[x][y] = dist[t.x][t.y] + 1;
                    q.push({x, y});
                }
            }
        }
    }

    int res = 1e8;
    for (int i = 0; i <= k; i ++ )
        res = min(res, dist[2][i]);
    return res - 1;
}

int main()
{
    cin >> n >> m >> k >> r;
    memset(h, -1, sizeof h);
    for (int i = 1; i <= n; i ++ ) cin >> p[i].x >> p[i].y;
    for (int i = n + 1; i <= n + m; i ++ ) cin >> p[i].x >> p[i].y;

    for (int i = 1; i <= n + m; i ++ )
        for (int j = i + 1; j <= n + m; j ++ )
            if (check(p[i], p[j]))
                add(i, j), add(j, i);
    cout << bfs() << endl;

    return 0;
}




分享 stringstream

Lss_lmj
5天前

https://www.acwing.com/problem/content/3202/

#include <iostream>
#include <cstring>
#include <sstream>
#include <algorithm>

using namespace std;

const int N = 30;

int n;
bool o1[N], o2[N];
string ans[N];

int main()
{
    string str;
    cin >> str;
    for (int i = 0; i < str.size(); i ++ )
        if (i + 1 < str.size() && str[i + 1] == ':')
        {
            o2[str[i] - 'a'] = true;
            i ++ ;
        }
        else o1[str[i] - 'a'] = true;

    cin >> n;
    getchar();  // 将n后面的回车过滤掉
    for (int C = 1; C <= n; C ++ )
    {
        printf("Case %d:", C);
        getline(cin, str);
        stringstream ssin(str);
        vector<string> ops;
        while (ssin >> str) ops.push_back(str);
        for (int i = 0; i < 26; i ++ ) ans[i].clear();
        for (int i = 1; i < ops.size(); i ++ )
        {
            if (ops[i][0] != '-' || ops[i][1] < 'a' || ops[i].size() != 2) break;
            int k = ops[i][1] - 'a';
            if (o1[k]) ans[k] = "*";
            else if (o2[k] && i + 1 < ops.size()) ans[k] = ops[i + 1], i ++ ;
            else break;
        }
        for (int i = 0; i < 26; i ++ )
            if (ans[i].size())
            {
                cout << " -" << (char)(i + 'a');
                if (o2[i]) cout << ' ' << ans[i];
            }
        cout << endl;
    }
    return 0;
}





活动打卡代码 AcWing 3199. 命令行选项

Lss_lmj
5天前
#include <iostream>
#include <cstring>
#include <sstream>
#include <algorithm>

using namespace std;

const int N = 30;

int n;
bool o1[N], o2[N];
string ans[N];

int main()
{
    string str;
    cin >> str;
    for (int i = 0; i < str.size(); i ++ )
        if (i + 1 < str.size() && str[i + 1] == ':')
        {
            o2[str[i] - 'a'] = true;
            i ++ ;
        }
        else o1[str[i] - 'a'] = true;

    cin >> n;
    getchar();  // 将n后面的回车过滤掉
    for (int C = 1; C <= n; C ++ )
    {
        printf("Case %d:", C);
        getline(cin, str);
        stringstream ssin(str);
        vector<string> ops;
        while (ssin >> str) ops.push_back(str);
        for (int i = 0; i < 26; i ++ ) ans[i].clear();
        for (int i = 1; i < ops.size(); i ++ )
        {
            if (ops[i][0] != '-' || ops[i][1] < 'a' || ops[i].size() != 2) break;
            int k = ops[i][1] - 'a';
            if (o1[k]) ans[k] = "*";
            else if (o2[k] && i + 1 < ops.size()) ans[k] = ops[i + 1], i ++ ;
            else break;
        }
        for (int i = 0; i < 26; i ++ )
            if (ans[i].size())
            {
                cout << " -" << (char)(i + 'a');
                if (o2[i]) cout << ' ' << ans[i];
            }
        cout << endl;
    }
    return 0;
}




活动打卡代码 AcWing 3198. 窗口

Lss_lmj
5天前
#include<bits/stdc++.h>
using namespace std;

const int N= 15;

int n,m;
struct Window
{
    int x1 ,y1,x2,y2;
    int id;
}w[N];

int get(int x,int y)
{
    for(int i=n;i;i--)//从顶层向下遍历 
    {
        if (x >= w[i].x1 && x <= w[i].x2 && y >= w[i].y1 && y <= w[i].y2)

            return i;
    }
    return 0;
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x1,x2,y1,y2;
        cin>>x1>>y1>>x2>>y2;
        w[i]={x1,y1,x2,y2,i};
    }

     while (m -- )
    {
        int x, y;
        cin >> x >> y;
        int t = get(x, y);
        if (!t) puts("IGNORED");
        else
        {
            cout << w[t].id << endl;
            auto r = w[t];
            for (int i = t; i < n; i ++ ) w[i] = w[i + 1];
            w[n] = r;
        }
    }

    return 0;
}


活动打卡代码 AcWing 3197. 相反数

Lss_lmj
5天前
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1010;

int n;
int s[N];

int main()
{
    cin >> n;
    while (n -- )
    {
        int x;
        cin >> x;
        s[abs(x)] ++ ;
    }

    int res = 0; 
    for (int i = 0; i < N; i ++ )
        if (s[i] == 2)
            res ++ ;
    cout << res << endl;

    return 0;
}