化妆晚会

来源:互联网 发布:短信任意显示软件 编辑:程序博客网 时间:2024/04/27 18:18

题目:

地址:http://exam.upc.edu.cn/problem.php?id=3613

题目描述

  万圣节又到了!FJ打算带他的奶牛去参加化装晚会,但是,FJ只做了一套能容下两头总长不超过S (1≤S≤1000000)的奶牛恐怖服装。FJ养了N(2≤N≤20000)头按1–N顺序编号的奶牛,编号为i的奶牛的长度为L_i(1≤L_i≤1000000)。如果两头奶牛的总长度不超过S,那么她们就能穿下这套服装。
FJ想知道,如果他想选择两头不同的奶牛来穿这套衣服,一共有多少种满足条件的方案。

输入

第1行是2个整数:N和S;
第2~N+l行每行一个整数:L_i。

输出

1个整数,表示FJ可选择的所有方案数。注意奶牛顺序不同的两种方案是被视为相同的。

样例输入

4 6
3
5
2
1

样例输出

4

提示

样例说明:4种选择分别为:奶牛1和奶牛3;奶牛l和奶牛4;奶牛2和奶牛4;奶牛3和奶牛4。

思路

  枚举每头牛然后二分查找就可以。

  昨天看了一篇文章,阐明了cin和cout其实是不比scanf和printf慢的,加上正在用的IDE最近更新了一次编译器版本,只要我使用C语言的函数就会给我warning,所以决定开始慢慢学习使用STL了。

////  main.cpp//  L////  Created by LucienShui on 2017/7/24.//  Copyright © 2017年 LucienShui. All rights reserved.//#include <bits/stdc++.h>#define edl '\n'using namespace std;int main (int argc, char* argv[]) {#ifndef ONLINE_JUDGE    freopen("in.txt","r",stdin);#endif    ios_base::sync_with_stdio(false);    cin.tie(nullptr);    int n,s,tmp,result{};    vector<int> a;    cin >> n >> s;    for(int i=0 ; i<n ; i++) {        cin >> tmp;        a.push_back(tmp);    }    sort(a.begin(),a.end());    for(auto i = a.begin() ; i!=a.end() && *i < s ; i++) {        tmp = s - *i;        auto tmpa= upper_bound(a.begin(),i,tmp);        result += tmpa - a.begin();    }    cout << result << edl;    return 0;}