头像

ningmeng




离线:1天前


最近来访(22)
用户头像
Aaron0808
用户头像
chaosup
用户头像
EdwardNygma
用户头像
太雪菜
用户头像
max2021
用户头像
磨糖fly
用户头像
有点丶
用户头像
1_120
用户头像
kerotsy
用户头像
宇宙有边
用户头像
济带阿孙
用户头像
灰人
用户头像
北边小洛
用户头像
专业送分选手
用户头像
Cold_heartless
用户头像
行亦謙
用户头像
呐呐呐呐
用户头像
Fatin
用户头像
4444486
用户头像
顾北清歌寒_9

活动打卡代码 AcWing 786. 第k个数

ningmeng
11天前
#include <iostream>
using namespace std;
const int N = 100010;
int q[N];
int qs(int q[],int l,int r,int k)
{
    if (l >= r){
        return q[l];
    }
    int i = l - 1, j = r + 1, x = q[l + r >> 1];
    while (i < j)
    {
        do i ++ ; while (q[i] < x);
        do j -- ; while (q[j] > x);
        if (i < j) swap(q[i], q[j]);
    }
    if (j - l + 1 >= k) return qs(q, l, j, k);
    else return qs(q, j + 1, r, k - (j - l + 1));
}
int main()
{
    int n,k;
    cin>>n>>k; 
    for (int i=0;i<n;i++){
        cin>>q[i];  
    }
    cout<<qs(q,0,n-1,k)<<endl;
    return 0;
}


新鲜事 原文

ningmeng
12天前
于是瞬间就慌了
图片



ningmeng
14天前

求求大佬帮一下这位蒻蒟TAT,谢谢

题目链接 七夕祭

我遇到了 在七夕节做七夕祭并写完代码而且没找到自己的错误 问题。

错误的代码:

#include<bits/stdc++.h>
using namespace std;
long long n,m,t;
long long hang[100001],lie[100001];
long long s[100001],a[100001];
long long buh,bul;
int main()
{
    cin>>n>>m>>t;
    for(long long i=1;i<=t;i++){
        long long x,y;
        cin>>x>>y;
        hang[x]++;
        lie[y]++;
    }
    long long kh=0;
    if(1.0*t/m==t/m){
        for(long long i=1;i<=m;i++){
            hang[i]-=t/m;
        }
        for(long long i=1;i<=m;i++){
            s[i]=s[i-1]+hang[i];
        }
        sort(s+1,s+m+1);
        kh=(m+1)/2;
        for(long long i=1;i<=m;i++){
            buh+=abs(s[i]-s[kh]); 
        } 
    }
    for(long long i=1;i<=m;i++){
        s[i]=0;
    }
    long long kl=0;
    if(1.0*t/n==t/n){
        for(long long i=1;i<=n;i++){
            lie[i]-=t/n;
        }
        for(long long i=1;i<=n;i++){
            s[i]=s[i-1]+lie[i];
        }
        sort(s+1,s+n+1);
        kl=(n+1)/2;
        for(long long i=1;i<=n;i++){
            bul+=abs(s[i]-s[kl]); 
        } 
    }
    if(buh&&bul) cout<<"both"<<" "<<buh+bul;
    else if(buh) cout<<"row"<<" "<<buh;
    else if(bul) cout<<"row"<<" "<<bul;
    else cout<<"impossible";
    return 0;
 } 

编译器:你 Wrong Answer 了,祝你七夕快乐!

实际上想在七夕节写一篇这个题的题解的..... 结果把自己心态搞炸了



ningmeng
14天前
#include <iostream>
using namespace std;
const int N = 100010;
int n;
int q[N], s[N];
int main(){
    cin>>n;
    for (int i = 0; i < n; i ++ ){
        cin>>q[i];
    }
    int res=0;
    for (int i=0,j=0;i<n;i++)
    {
        s[q[i]]++;
        while(j<i&&s[q[i]]>1)s[q[j++]]--;
        res = max(res, i - j + 1);
    }
    cout << res << endl;
    return 0;
}


新鲜事 原文

ningmeng
18天前
学会模板和真正的应用简直是两码事o(TヘTo)



ningmeng
18天前
#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int s=0;
        int a;
        cin>>a;
        for(int j=a;j;j-= j&-j){
            s++;
        }
        cout<<s<<" ";

    }
    return 0;
}



ningmeng
19天前

题目描述

第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……。

这种工资发放模式会一直这样延续下去:当连续 N 天每天收到 N 枚金币后,骑士会在之后的连续 N+1 天里,每天收到 N+1 枚金币。

请计算在前 K 天里,骑士一共获得了多少金币

输入天数,求从第一天到这一天的总金币数

洛谷题面

输入样例

6

输出样例

14

分析

可以总结一下题意:

屏幕截图 2022-07-30 113655.png

如图,我们可以知道我们要掌握两个变量:”总金币数”,”天数”

总金币数:s
天数:s1

接下来就要去考虑怎样构建这两个变量来解题了

要求总金币数,就要累加每一天的金币
所以我们先要模拟每一天的金币数成为这个样子:
1   2 2   3 3 3   4 4 4 4   5 5 ......

我们先观察上面这一串数字
不难想到要用双层循环
一层循环这个:

屏幕截图 2022-07-30 145305.png

另一层循环里面的数字

屏幕截图 2022-07-30 145617.png

于是:(这里不懂的话建议你模拟一下)
for(int i=1;i<=k;i++){ 
    for(int j=1;j<=i;j++){
        s=s+i;  
    }
}

然后还要模拟天数
屏幕截图 2022-07-30 153233.png
如图,可以用这个规律来记录天数

(这里不懂的话建议你模拟一下)
for(int i=1;i<=k;i++){
    s1=s1+i;    //记录被圈出来的这类天数
    for(int j=1;j<=i;j++){
        s=s+i;  
    }
}

不过还要有些判断条件:
如果输入的天数刚好就是上一副图圈出来的那类数字
那么就直接输出当前金币总数:

if(s1==k){
    cout<<s;
    return 0;
}

如果输入的天数不是上一副图圈出来的那类数字

(这里不懂的话建议你模拟一下)
if(s1-i<k&&k<s1){   //判断输入的天数是不是上一副图圈出来的那类数字
    c=s1-k;         //记录一下 这次记录的天数 和 输入的天数 的距离(多出来的天数)
    cout<<s-c*i;    //输出 这次记录的天数所对应的金币总数 减去 多出来天数的总金币数
    return 0;
}

c++代码

 #include<iostream>
using namespace std;
int a[1005];
int main(){
    int k,c;
    cin>>k;
    int s=0,s1=0;
    for(int i=1;i<=k;i++){
//      a[i]=i;
        s1=s1+i; 
        for(int j=1;j<=i;j++){
            s=s+i;  
        }
        if(s1==k){
                cout<<s;
                return 0;
        }
        if(s1-i<k&&k<s1){
            c=s1-k;
            cout<<s-c*i;
            return 0;
        }
    }
    return 0;
}


活动打卡代码 AcWing 798. 差分矩阵

ningmeng
20天前
#include <iostream>
using namespace std;
const int N = 1010;
int n, m, q;
int a[N][N], b[N][N];
void insert(int x1, int y1, int x2, int y2, int c){
    b[x1][y1] += c;
    b[x2 + 1][y1] -= c;
    b[x1][y2 + 1] -= c;
    b[x2 + 1][y2 + 1] += c;
}
int main(){
    scanf("%d%d%d", &n, &m, &q);
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
            scanf("%d", &a[i][j]);
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
            insert(i, j, i, j, a[i][j]);
    while (q -- )
    {
        int x1, y1, x2, y2, c;
        cin >> x1 >> y1 >> x2 >> y2 >> c;
        insert(x1, y1, x2, y2, c);
    }
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
            b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];
    for (int i = 1; i <= n; i ++ ){
        for (int j = 1; j <= m; j ++ ) printf("%d ", b[i][j]);
        puts("");
    }
    return 0;
}


新鲜事 原文

ningmeng
22天前
又是美好的一天~
图片



ningmeng
23天前

题目描述

洛谷题面
有几个人(n)相互送礼(钱),给出他们每个人送钱的总钱数、人数 、对象,问他们每个人进行完送礼和收礼后赚了多少钱(可以是负数)

输入样例

5
dave
laura
owen
vick
amr
dave
200 3
laura
owen
vick
owen
500 1
dave
amr
150 2
vick
owen
laura
0 2
amr
vick
vick
0 0

输出样例

dave 302
laura 66
owen -359
vick 141
amr -150

注意点

  • 送礼的对象数如果为0要特判,因为除数不能为0

  • 送出的钱永远是整数

  • 剩余未送出的钱应留在送礼者,所以不能直接减这个人 花在送礼上的钱

C++ 代码

#include<bits/stdc++.h>
using namespace std;
struct node{        //来记录每个人和他们对应的钱数 
    char ren[16];   //人名 
    int zq;         //钱数 
}a[11];
char b[16],sfr[16];     
int sq,sfrs,c1,c2;
int main(){
    int n;          
    cin>>n;         //输入有多少个人 
    for(int i=1;i<=n;i++){
        cin>>a[i].ren;      //输入人名 
    }
    for(int i=1;i<=n;i++){
        cin>>b>>sq>>sfrs;       //b代表送礼的人,sq代表这个人花在送礼上的钱,sfrs代表接受礼物的人 
        for(int k=1;k<=n;k++){      
            if(strcmp(b,a[k].ren)==0){      //找到送礼的人的编号,好通过结构体减掉他因为送礼花掉的钱 (zq) 
                c1=k;               //记下这个编号 
                break;              //节约循环次数 
            }
        }
        if(sfrs!=0){    //除数不能为0    
            a[c1].zq-=((sq/sfrs))*sfrs;     //减掉的钱数:"送出的钱永远是整数,即假设送礼人一次向 sfrs 人送出 sq 元,每个人应该得到 [sq/sfrs]元。剩余未送出的钱应返还给送礼者。" 
        }
        else{           //如果除数是0就跳开这一层循环下一层 
            continue;
        }
        for(int j=1;j<=sfrs;j++){       //输入每个受礼者 
            cin>>sfr;
            for(int q=1;q<=n;q++){
                if(strcmp(sfr,a[q].ren)==0){        //找到受礼者的编号,好通过结构体加上他因为收礼增加的钱 (zq)
                    c2=q;           //记下这个编号
                    break;          //节约循环次数
                }
            }
            a[c2].zq+=(sq/sfrs);    //加上的钱数 "即假设送礼人一次向 sfrs 人送出 sq 元,每个人应该得到 [sq/sfrs]元。"
        }
    }
    for(int i=1;i<=n;i++){      //循环输出每个人的名字与钱数 
        cout<<a[i].ren<<" "<<a[i].zq<<endl;
    }
    return 0;
}