头像

努力做自己




离线:1小时前


最近来访(18)
用户头像
EVE.
用户头像
su尔
用户头像
砥砺_7
用户头像
King_96
用户头像
Fatin
用户头像
recursion.
用户头像
松鼠会
用户头像
Cygnenoir
用户头像
jackson00
用户头像
从心_7
用户头像
夜寐
用户头像
LIERLIER
用户头像
你微笑说愿望太大
用户头像
.._89
用户头像
lonefri
用户头像
TomorrowLand


#include<iostream>

using namespace std;

const int N=1e6+10;
int n,m;
int a[N],flag[N];

int main()
{
   scanf("%d%d",&n,&m);
   for(int i=1;i<=n;i++)
      scanf("%d",&a[i]);

    int cnt=0,maxn=1e8;
    int l=0,r=0;
    for(int i=1,j=0;i<=n;i++)// 暴力枚举左端点
    {
        if(i>1)
        {
            flag[a[i-1]]--;  // 窗口左移吐出原来的第一个数 
            if(flag[a[i-1]]==0)cnt--;  // 如果吐出后变为0说明画作数量要减1
        }
        while(j<=n&&cnt<m)  // 区间满足的性质
        {
            j++;
            if(flag[a[j]]==0) cnt++;
            flag[a[j]]++; 
        }
        if(cnt==m&&j<=n)
        {
            if(j-i+1<maxn)
            {
                maxn=j-i+1;
                l=i;
                r=j;
            }
        }
    }
    cout<<l<<" "<<r<<endl;
    return 0;
}



反转链表

#include<iostream>
#include<algorithm>
using namespace std;

const int N=1e5+10;
int h,v[N],ne[N];  // 头节点地址h 数据域v[] 指针域ne[]
int ip[N];  // 链表地址存入数组ip[]

int main()
{
    int n,k;
    scanf("%d%d%d",&h,&n,&k);
    while(n--)  // 读入链表
    {
        int addr,da,next;
        scanf("%d%d%d",&addr,&da,&next);
        v[addr]=da,ne[addr]=next;
    }

    int cnt=0;
    for(int i=h;i!=-1;i=ne[i])  // 链表地址存入ip
       ip[cnt++]=i;

    for(int i=k;i<=cnt;i+=k)
        reverse(ip+i-k,ip+i);  // 每k个一翻转

    for(int i=0;i<cnt;i++)
    {
        printf("%05d %d ",ip[i],v[ip[i]]);
        if(i==cnt-1) puts("-1");
        else printf("%05d\n",ip[i+1]);
    }
    return 0;
}



C++ 代码

#include<iostream>
#include<vector>
using namespace std;

const int N=1e5+10;
int h,n,k;  // 头节点 节点个数 正整数K
int v[N],ne[N];

int main()
{
    scanf("%d%d%d",&h,&n,&k);
    while(n--)  // 读入链表
    {
        int addr,data,next;
        scanf("%d%d%d",&addr,&data,&next);
        v[addr]=data,ne[addr]=next;
    }

    vector<int>a,b,c;  // 小于0放进a 区间[0,K]内放进b 大于K放进c
    for(int i=h;i!=-1;i=ne[i])
    {
        int data=v[i];
        if(data<0)a.push_back(i);
        else if(data>=0&&data<=k)b.push_back(i);
        else c.push_back(i);
    }

    for(int i=0;i<b.size();i++)
        a.push_back(b[i]);
    for(int i=0;i<c.size();i++)
        a.push_back(c[i]);

    for(int i=0;i<a.size();i++)
    {
        printf("%05d %d ",a[i],v[a[i]]);
        if(i==a.size()-1)puts("-1");
        else printf("%05d\n",a[i+1]);
    }
    return 0;
}



链接

VScode Competitive programming helper怎么配置实现自定义测试实例,独立测试窗口呢?



活动打卡代码 AcWing 756. 蛇形矩阵

小技巧:偏移量

#include<iostream>

using namespace std;

int res[100][100];

int main()
{
    int n,m;
    cin>>n>>m;

    int dx[]={0,1,0,-1},dy[]={1,0,-1,0};  // 向下为x轴正方向,向右为y轴正方向
    int x=0,y=0,d=0;
    for(int k=1;k<=n*m;k++)
    {
        res[x][y]=k;
        int a=x+dx[d],b=y+dy[d];
        if(a<0||b<0||a>=n||b>=m||res[a][b])  // 越界或重复掉头
        {
            d=(d+1)%4;  // 四种操作循环
            a=x+dx[d],b=y+dy[d];
        }
        x=a,y=b;
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cout<<res[i][j];
            if(j<m-1)cout<<" ";
        }
        puts("");
    }
    return 0;
}


活动打卡代码 AcWing 3526. 素数

#include<iostream>
#include<vector>
using namespace std;
vector<int>prime;  // 存储质数
int n;  
bool st[10010];  // 标记数字
void get_prime(int x)
{
    st[1]=true;
    for(int i=2;i<x;i++)
    {
        if(!st[i])
        {
            prime.push_back(i);
            for(int j=i+i;j<x;j+=i)
               st[j]=true;
        }
    }
}
int main()
{
    while(cin>>n)
    {
     int cnt=0; 
     get_prime(n);
     for(int i=0;i<prime.size();i++)
        {
            if(prime[i]%10==1)
            {
                 cout<<prime[i]<<" ";
                 cnt++;
            }
        }
        if(cnt<1)cout<<"-1";
     prime.clear();
     puts("");
    }
    return 0;
}


活动打卡代码 AcWing 794. 高精度除法

高精度出发(模拟竖式除法)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

vector<int>a;  // 存储被除数
int b,r;  // 除数和余数
vector<int>div(int b)
{
    vector<int>C;
    for(int i=a.size()-1;i>=0;i--)  // 模拟竖式除法
    {
        r=r*10+a[i];
        C.push_back(r/b);
        r%=b;
    }
    reverse(C.begin(),C.end());
    while(C.size()>1&&C.back()==0)C.pop_back();
    return C;
}
int main()
{
    // 读入被除数
    string str;
    getline(cin,str);  
    for(int i=str.size()-1;i>=0;i--) a.push_back(str[i]-'0');
    cin>>b;
    auto C= div(b);
    for(int i=C.size()-1;i>=0;i--)  // 输出商
      cout<<C[i];
    puts("");
    cout<<r<<endl;  // 输出余数
    return 0;
}


活动打卡代码 AcWing 3449. 数字根

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    string str;
    while(getline(cin,str))
    {
        if(str=="0")break;
        while(str.size()!=1)
        {
           int temp=0;
           for(int i=0;i<str.size();i++)
             temp+=str[i]-'0';
           str=to_string(temp);
        }
        cout<<str<<endl;
    }
    return 0;
}



题目链接 pta 1076 WiFi密码

n=8,却只能读入7行字符串

错误的代码:

#include<iostream>
using namespace std;
int n;
int main()
{
    cin>>n;
    while(n--)
    {
        string str;
        getline(cin,str);
        for(int i=0;i<str.size();i++)
            if(str[i]=='T')cout<<str[i-2]-'A'+1;
    }
    return 0;
}

QQ图片20220808163909.png



活动打卡代码 AcWing 4269. 校庆

哈希表存储信息实现o(1)查找

#include<iostream>
#include<string>
#include<unordered_set>
using namespace std;
unordered_set<string>h;//定义无需集合存储校友信息

int n,m;//定义校友个数n,来宾个数m

int main()
{
    cin>>n;
    while(n--)
    {
        string info;
        cin>>info;
        h.insert(info);//读入校友信息
    }
    cin>>m;
    string a,b;//定义临时变量校友最年长的a,来宾最年长的b
    int cnt=0;
    while(m--)
    {
        string  info;
        cin>>info;
        if(h.count(info))
        {
            cnt++;//如果来宾中有校友,cnt++
            if(a.empty()||a.substr(6,8)>info.substr(6,8))a=info;//a为空或读入的比a小
        }
        if(b.empty()||b.substr(6,8)>info.substr(6,8))b=info;
    }
    cout<<cnt<<endl;
    if(cnt)cout<<a<<endl;
    else cout<<b<<endl;

    return 0;
}