设为首页 加入收藏

TOP

【比赛】羊村的OIの题解(一)
2019-07-05 20:10:31 】 浏览:84
Tags:比赛 羊村的 题解

$$T1喜羊羊与灰太狼--仓库管理$$

题目背景

这是一道送分题
可以开o2

题目描述

懒羊羊当上了羊村的仓库管理员。仓库里有很多很多筐的青草然而众所周知,懒羊羊是所有小羊里最贪吃的只。每当他想吃草时,就会从仓库里找出数量最少的一筐草,把它吃掉。(吃多了就会被喜羊羊惩罚)

输入输出格式

输入格式:

第$1$行$1$个正整数$n$,下面$n$行 当这行形式为q时,表示要吃掉仓库里当前数量最少的那筐青草; 当这行形式为一个字符i和一个整数$k$时,表示筐数量为$k$的青草存入了仓库数据保证一定饿的时候有草可以吃,(仓库不会空)

输出格式:

每行输出一行一个数,表示懒羊羊当前吃掉的那份青草的数量是多少

输入输出样例

输入样例#1:
5
i 5
i 2
q
i 9
q
输出样例#1:
2
5
说明
$1\le n \le 1000000$,$1\le k \le2000000000$
注意$k$可能比$2000000000$大一些($k \le 2200000000$),数据出了点小锅,见谅

思路:

$STL$大法好啊
priority_queue<int,vector<int>,greater<int> > q;相当于小根堆

$Code$

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
int n;
priority_queue<int,vector<int>,greater<int> > q;
inline long long read(){
    long long x=0;bool f=0;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return f?-x:x;
}
int main(){
    n=read();
    char c;
    long long x;
    while(n--){
        cin>>c;
        if(c=='i'){
            x=read();
            if(x<=0x7fffffff)q.push(x);//数据水??
        }else {
            cout<<q.top()<<endl;
            q.pop();
        }
    }
    return 0;
}

$$T2喜羊羊与灰太狼--破译密码$$

题目背景

羊羊们因为仓库里的食物莫名变少,只能去狼堡偷吃的........可是灰太狼把羊羊们抓到了

题目描述

想要逃出狼堡很简单只需要破解密码就可以了

狼堡安装了$AI$管家傻强来看住小羊们可是聪明的喜羊羊黑入了管家傻强,傻强告诉了他们$n$个数,有任意个数出现了奇数次,有任意个数出现了偶数次,大门的密码就是分别输入出现了奇数次的数的所有正因数的个数。

输入输出格式

输入格式:
第 $1$ 行,一个正整数 $n$。 接下来$n$行,每行一个正整数 p($p \le 100000$) 。

输出格式:

每行输出两个数分别是出现了奇数次的数和它正因数的个数。按第一个数从小到大输出

输入输出样例

输入样例#1:
10
1
2
2
3
3
3
4
4
4
4
输出样例#1:
1 1
3 2
说明
30%的数据满足:$n \le 500$
50%的数据满足:$n \le 1000$
100%的数据满足:$n \le 10000$

思路

枚举

$Code$

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int n;
int pd[100001];
inline int read(){
    int x=0;bool f=0;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return f?-x:x;
}
inline void write(int x){
    if(x<0){putchar('-');write(-x);}
    else {if(x/10)write(x/10);putchar(x%10+'0');}
}

int main(){
    n=read();
    int x;
    int maxx=0;
    for(register int i=1;i<=n;++i){
        x=read();
        pd[x]++;
        maxx=maxx>x?maxx:x;
    }
    for(register int i=1;i<=maxx;++i){
        if(pd[i]!=0&&pd[i]%2!=0){
            int bz=sqrt(i),sum=0;
            for(register int j=1;j<=bz;++j){
                if(i%j==0) sum++;
            }
            write(i);
            printf(" ");
            if(bz*bz==i) write(sum*2-1);//当时少了这个判断零分
            else write(sum*2);
            puts("");
            //printf("%d %d\n",i,sum*2);
        }
    }
    return 0;
}

$$T3喜羊羊与灰太狼--烦恼的礼物$$

题目背景

就在千钧一发之际,刀羊爷爷开了鬼刀救出了羊羊们......
T3请按照样例说明写代码,必须每个人挨个借,借下一个人的必须花完或者扔完上一个人的

题目描述

羊羊们决定送给刀羊爷爷 $M$件礼物,决定顺序购买并赠送(注意是按顺序购买),但是羊羊们没有钱所以只能向 $N$位坑爹的建筑工人借钱,然而他们都是高利贷 为了减少最高的借款量,请你帮帮羊羊们.

输入输出格式

输入格式:

第一行输入两个用空格隔开的正整数 $M$ 和 $N$。 接下来 $M$ 行依次表示礼物的价格。

价格一定小于等于$10000$

输出格式:

一个数$money$表示最高借款量

输入输出样例

输入样例#1:
7 5
100
400
300
100
500
101
400
输出样例

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇洛谷 P1432 倒水问题 下一篇printf 函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目