头像

2010

$\href{https://www.acwing.com/file_system/file/content/whole/index/content/4476149/}{{个人主页}}$封禁家族的蒟蒻




离线:7小时前


最近来访(2319)
用户头像
毒瘤
用户头像
AcWing2AK
用户头像
whale77
用户头像
lym.
用户头像
福宝j
用户头像
塔的魔法师
用户头像
yhizhj
用户头像
tdds
用户头像
期末加油
用户头像
lsz_
用户头像
城南
用户头像
一只野生墨染空
用户头像
封禁用户3号
用户头像
bobo2010
用户头像
Aranak
用户头像
Gragon-Li
用户头像
大雪莱
用户头像
猪头_8
用户头像
maro
用户头像
sdu_Lyx

活动打卡代码 AcWing 3745. 牛的学术圈 I

2010
3天前
#include<iostream>
using namespace std;
const int N=1e5+10;
int cnt[N],n,l;
int main()
{
    cin>>n>>l;
    for(int i=0;i<n;i++)
    {
        int x;
        cin>>x;
        cnt[x]++;
    }
    int num=0;
    for(int i=0;i<=N;i++)
    {
        if(n-num<i)
        {
           int d=i-(n-num);
           if(l>=d&&cnt[i-1]>=d) l-=d,cnt[i-1]-=d,cnt[i]+=d;
           else 
           {
               cout<<i-1;
               break;
           }
        }
        num+=cnt[i];
    }
    return 0;
}
/*
 01020    2010     2    2010
2    1   2    0    0   2    0
    0    1    0    1   1    0
   2     2    0    0   2    0
  0      1    0    2   1    0
 1       2    0    0   2    0
0201020   1020     1    1020
*/



2010
3天前

开方与平方

今天来说一说$c++$的平方与开方

先说说开方的函数:

$c++$中开方的函数是sqrt()函数

$\color{MediumOrchid}{sqrt()函数的用法很简单,sqrt(a),a是要被开方的数。}$

那c++中平方的函数又是什么呢?是pow()函数

$\color{Turquoise}{pow()函数的用法也很简单,pow(a,2) ,a是要平方的数,2是几次方。}$

很简单易懂吧?

最后附上一张sqrt()和pow()并用的图片:

捕获.PNG

求赞qwq

制作不易!!!禁止抄袭!!!




2010
4天前

c++ string末尾追加char字符

如果想在string s末尾追加abc

s=s+'a'+'b'+'c'  //这样写是可以的
s+='a'+'b'+'c'  //这样写是不可以的

所以追加单个字符,$\color{blue}{可以一个个加,也可以用第一种方式一次性加~}$

$\color{red}{但不可以像第二种一样~}$

求赞qwq

制作不易!!!禁止抄袭!!!




2010
4天前

为什么要对1000000007取模(取余)

$\color{GoldEnrod}{大数阶乘,大数的排列组合等,一般都要求将输出结果对1000000007取模(取余)}$

也许你会问:

$\color{Coral}{为什么总是1000000007呢???}$

大概≖‿≖✧是因为:(我猜的,不服你打我呀~)

1. 1000000007是一个质数(素数),对质数取余能最大程度避免冲突~

2. int32位的最大值为2147483647,所以对于int32位来说1000000007足够大

3. int64位的最大值为2^63-1,对于1000000007来说它的平方不会在int64中溢出

所以在大数相乘的时候,因为(a∗b)%c=((a%c)∗(b%c))%c,所以相乘时两边都对1000000007取模,再保存在int64里面不会溢出

$\color{MediumTurquoise}{。◕‿◕。}$

觉得有用的话点赞收藏一下呗

制作不易!!!禁止抄袭!!!



活动打卡代码 AcWing 4367. 拍照2

2010
4天前

5月26日区赛!!!

向一等奖冲刺!!!

1

y总保佑

#include <bits/stdc++.h>
using namespace std;
int a[100002], b[100002], n, ans;
bool f[100002];
int main() {
    cin >> n;
    for (int i = 1; i <= n; i ++ ) cin >> a[i];
    for (int i = 1; i <= n; i ++ ) cin >> b[i];
    for (int i = 1, j = 1; j <= n; )
        if (f[a[i]]) i ++;
        else if (a[i] == b[j]) i ++, f[b[j ++]] = 1;
        else ans ++, f[b[j ++]] = 1;
    cout << ans;
}


活动打卡代码 AcWing 2040. 礼物

2010
12天前

b站

#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
struct xxx
{
    int p,s;
}a[1001],b[1001];
bool cmp(xxx a,xxx b)
{
    return a.p+a.s<b.p+b.s;
}
int main()
{
    int i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++)cin>>a[i].p>>a[i].s;
    for(i=1;i<=n;i++){
        memcpy(b,a,sizeof(a));
        b[i].p/=2;
        sort(b+1,b+n+1,cmp);
        int t=0;
        for(j=1;j<=n;j++){
            t+=b[j].p+b[j].s;
            if(t>m)break;
        }
        ans=max(ans,j-1);
    }
    cout<<ans;
}


活动打卡代码 AcWing 4330. 非传递骰子

2010
12天前

悄悄问一句:win10怎么录屏?

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool fl,flag;
int c[4];
bool cheak(int *a,int *b)
{
    int l=0,r=0;
    for(int i=0;i<4;i++)for(int j=0;j<4;j++)
    {
        if(a[i]>b[j])l++;
        else if(a[i]<b[j])r++;
    }
    if(l==r)fl=true;
    return l>r;
}
void find(int *a,int *b,int n)
{
    if(n==5)
    {
        if(cheak(b,c)&&cheak(c,a))flag=true;
        return ;
    }
    for(int i=1;i<=10;i++)
    {
        c[n]=i;
        find(a,b,n+1);
    }
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
       int a[4],b[4];
       fl=false,flag=false;
       for(int i=0;i<4;i++) cin>>a[i];
       for(int i=0;i<4;i++) cin>>b[i];
       if(!cheak(a,b)) swap(a,b);
       if(fl) cout<<"no"<<endl;
       else 
       {
           find(a,b,0);
           if(flag)cout<<"yes"<<endl;
           else cout<<"no"<<endl;
       }
    }
    return 0;
}



2010
13天前

最高的牛

题目链接

https://www.acwing.com/problem/content/description/103/


题目描述

有 $N$ 头牛站成一行,被编队为 $1、2、3…N$,每头牛的身高都为整数。

当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方。

现在,我们只知道其中最高的牛是第 $P$ 头,它的身高是 $H$ ,剩余牛的身高未知。

但是,我们还知道这群牛之中存在着 $M$ 对关系,每对关系都指明了某两头牛 $A$ 和 $B$ 可以相互看见。

求每头牛的身高的最大可能值是多少。

输入格式
第一行输入整数 $N,P,H,M$,数据用空格隔开。

接下来 $M$ 行,每行输出两个整数 $A$ 和 $B$ ,代表牛 $A$ 和牛 $B$ 可以相互看见,数据用空格隔开。

输出格式

一共输出 $N$ 行数据,每行输出一个整数。

第 $i$ 行输出的整数代表第 $i$ 头牛可能的最大身高。

数据范围

$1≤N≤5000$,
$1≤H≤1000000$,
$1≤A,B≤10000$,
$0≤M≤10000$


样例

输入样例:

9 3 5 5
1 3
5 3
4 3
3 7
9 8

输出样例:

5
4
5
3
4
4
5
5
5

注意⚠️:

此题中给出的关系对可能存在重复!!!


算法

差分+区间处理

额,就是,这题呢,我一开始是用找规律的,谁叫我太菜呢

我把这题的样例写下来,模拟一遍,找到了规律,发现其实很简单,方法就是把所有值初始化为$H$,然后再把$A$到$B$之间的数减1就可以了

👇下面讲一下正经方法👇
分析

  • 题目中说对于两头牛它们可以互相看见,说明两牛之间的牛的身高都比这两只低,因此根据最优的原则,我们可知中间的牛可以都比这两只小1即可 。

  • 现在我们考虑关系会不会有交叉的情况。
    假设i<j<k<l;存在关系ik和jl,因为存在关系ik,因此k的身高大于j,又因为存在jl,所以j的身高大于k,前后互相矛盾,因此不存在关系存在交叉的情况。

  • 所以对于该问题,我们可以假设全部都是最高身高,然后每出现一对关系,就将他们之间的牛的身高全减1,因为涉及区间加减1,我们可以采用差分和前缀和的关系来解决该问题,具体实现看代码,注意关系判重。


c++代码

#include<iostream>
using namespace std;
long long n,h,p,a[10100],b[10100],m,x[5100];
bool r;
int main()
{
    scanf("%lld%lld%lld%lld",&n,&p,&h,&m);
    //for(long long i=1;i<=n;i++) x[i]=h;
    for(long long i=1;i<=m;i++)
    {
        scanf("%lld%lld",&a[i],&b[i]);
        if(a[i]>b[i]) swap(a[i],b[i]);
        r=true;
        for(long long j=1;j<i;j++)
        {
            if(a[i]==a[j]&&b[i]==b[j]) 
            {
                r=false;
                break;
            }
        }
        if(r==true)
        {
            x[a[i]+1]--;
            x[b[i]]++;
        }
    }
    for(long long i=1;i<=n;i++) x[i]+=x[i-1];
    for(long long i=1;i<=n;i++)
    {
        x[i]+=h;
        printf("%lld\n",x[i]);
    } 
    return 0;
} 

555最近好久没更了,因为最近比较忙,今天好不容易抽出点时间更了一期,你们还不点赞?

制作不易!!!禁止抄袭!!!



活动打卡代码 AcWing 4262. 空调

2010
13天前

又开启了偷懒模式(逃)

#include<bits/stdc++.h>
using namespace std;
int n,ans;
int a[100010],t[100010];
int main()
{
    int i;
    cin>>n;
    for(i=1;i<=n;i++)cin>>a[i];
    for(i=1;i<=n;i++)cin>>t[i];
    int l=0,h=0;
    for(i=1;i<=n;i++){
        h=max(0,a[i]-t[i]);
        ans+=max(0,h-l);
        l=h;
    }
    l=h=0;
    for(i=1;i<=n;i++){
        h=max(0,t[i]-a[i]);
        ans+=max(0,h-l);
        l=h;
    }
    cout<<ans;
} 


活动打卡代码 AcWing 3746. 牛的学术圈 II

2010
14天前
#include<iostream>
#include<map>
using namespace std;
long long n,k,a[110][110],s;
map<string,long long> name;
string b,x[110];
int main() {
    scanf("%lld",&k,&n);
    for(long long i=1;i<=n;i++) 
    {
        for(long long j=1;j<=n;j++) a[i][j]=2;
    }
    for(long long i=1;i<=n;i++) 
    {
        cin>>b; 
        name[b]=i;
    }
    while(k--) 
    {
        s=1;
        for(long long i=1;i<=n;i++)
        {
            cin>>x[i];
            if(x[i]<x[i-1]) s=i;
            for(long long j=1;j<s;j++)
            {
                a[name[x[i]]][name[x[j]]]=1;
                a[name[x[j]]][name[x[i]]]=0;
            }
        }
    }
    for(long long i=1;i<=n;i++)
    {
        for(long long j=1;j<=n;j++)
        {
            if(i==j) 
            {
                printf("B"); 
                continue;
            }
            if(a[i][j]!=2) printf("%lld",a[i][j]);
            else printf("?");
        }
        puts("");
    }
    return 0;
}