Little By Little( 三 )

本篇博客主要参照牛客网题解https://ac.nowcoder.com/discuss/152594

1.处女座与重修费

算法:简单模拟

思想:给你一个数组,记录小于60的个数,然后乘以400就是最后的结果

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n, cn = 0;
    cin>>n;
    for(int i = 0; i < n; i++){
        int t;
        cin>>t;
        if(t < 60)cn++;
    }
    cout<<cn*400<<endl;

return 0;
}

2.处女座的砝码

算法:模拟

题意:处女座热爱做物理实验,为了实验,处女座必须要精确的知道物品的质量。处女座准备自己设计一套砝码,每一个砝码都是正整数,这套砝码必须能够精确测量出n以内所有正整数的质量,处女座想要知道至少需要多少个砝码。你可以在天平的任意一边放置砝码

思想:每个砝码可以放左边,不放和右边,很容易联进制排列即可,选择砝码如下:1,3,9,27,…选m个数最多能称出的重量为:

注意:注意精度

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long double
int main(){
    LL n;
    cin>>n;
    LL x = 1, k = 1;
    while(x < n){
        x = x*3+1;
        k++;
    }
    cout<<k<<endl;
return 0;
}

3.处女座的期末复习

算法:贪心

题意:快要期末考试了,处女座现在要复习,问能不能在规定的时间内全部都复习,如果能输出“YES”,否则输出“NO”。

思想:先按照考试时间先后的顺序进行排序,然后比较距离考试剩余的时间和复习所用的时间进行比较,如果距离考试剩余的时间大于复习所用的时间,继续判断,否之就直接跳出判断输出“NO”。

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
struct Node
{
    LL a, b;
} tmp[100005];
bool cmp(Node A, Node B//按照考试时间先后的顺序
{
    return A.b < B.b;
}
int main()
{
    LL n;
    cin>>n;
    for(LL i = 0; i < n; i++)
    {
        cin>>tmp[i].a;
    }
    for(LL i = 0; i < n; i++)
    {
        cin>>tmp[i].b;
    }
    sort(tmp, tmp+n, cmp);//排序
    LL flag = 0;
    if(tmp[0].a > tmp[0].b)//如果第一场考试的时间小于复习的时间直接就判断了,
    {
        flag  = 1;
    }
    else
    {
        LL res = tmp[0].a;//累加复习的时间
        for(LL i = 1; i < n; i++)
        {
            LL k = tmp[i].b - i*2;//减去之前考试的时间
            res += tmp[i].a;//累加复习的时间
            //cout<<res<<"  "<<k;
            if(res > k)//复习的时间和距离考试剩余的时间
            {
                flag  = 1;
                break;
            }
        }
    }
    if(flag)cout<<"NO"<<endl;
    else cout<<"YES"<<endl;
    return 0;
}

4.处女座的签到题

算法:简单数学, 排序

题意:平面上有n个点,问:平面上所有三角形面积第k大的三角形的面积是多少?

思想:利用叉积求三角形的面积(  S = |((x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1) ) / 2|),先算不及进行除2,先把这些数据存起来,然后用 stl中的nth_element找到第k大的数进行除2.

代码:

#include<stdio.h>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
#define LL long long
struct Node{
       LL x, y;
}a[105];

int main(){
    int T, n, t;
    LL ans;
    cin>>T;
    while(T--){
        vector<LL>v;
        cin>>n>>t;
        for(int i = 0; i < n; i++){
            cin>>a[i].x>>a[i].y;
        }
        for(int i = 0; i < n; i++){
            for(int j =  i+1; j < n; j++){
                for(int k = j + 1; k < n; k++){
                    ans = abs((a[j].x-a[i].x)*(a[k].y-a[i].y)-(a[j].y-a[i].y)*(a[k].x-a[i].x));
                    v.push_back(ans);
                }
            }
        }
        nth_element(v.begin(), v.begin()+v.size()-t, v.end());
        LL res = v[v.size()-t];
        if(res%2){
            printf("%lld.50\n",res / 2);
        }
        else {
            printf("%lld.00\n",res / 2);
        }
    }
return 0;
}

5.处女座与cf

算法:模拟

题意:根据题意进行模拟

注意事项:不要忽略第6条的条件。

代码 :

#include<bits/stdc++.h>
#define maxn 1000
using namespace std;
map<string, int>ma;
#define LL long long
int timu[10] = {500, 1000, 1500, 2000, 2500};
int vis[maxn];
int cou[maxn][maxn], res[maxn], rec[maxn][maxn];//cou用来统计错误的次数,res保存得分情况,rec保存前一次ac的得分(如果不理解请仔细阅读第六条)
int main(){
    int n, m, time;
    string a, sub;
    string pro, ver;
    cin>>n>>m;
    for(int i = 1; i <= n; i++){
        cin>>a;
        ma[a] = i;
    }
    for(int i = 0; i < m; i++){
        cin>>time>>sub>>pro>>ver;
        int kind = ma[sub];
        int ti = pro[0] - 'A';//判断是哪一道题
        if(ver == "WA" || ver == "TLE"){//
            vis[kind] = 1;//证明参加比赛
            if(rec[kind][ti]){//对应第六条的情况
                res[kind] -= rec[kind][ti];
                rec[kind][ti] = 0;
            }
            cou[kind][ti]++;
        }
        if(ver == "CE"){
            if(rec[kind][ti]){//对应第六条的情况
                res[kind] -= rec[kind][ti];
                rec[kind][ti] = 0;
            }
            vis[kind] = 1;
            continue;
        }
        if(ver == "AC"){
            LL ans = max((int)(timu[ti]*0.3), timu[ti]-timu[ti]/250*time-cou[kind][ti]*50);//计算得分的方法
            if(!rec[kind][ti]){//对应第六条的情况
              rec[kind][ti] = ans;
              res[kind] += ans;
            }
            else {
              res[kind] = res[kind] + ans - rec[kind][ti];
              rec[kind][ti] = ans;
            }
            cou[kind][ti]++;
            vis[kind] = 1;
        }
    }
    int cnz = ma["cnz"], rs = 0, cn = 1;
    if(vis[cnz]){
    int key = res[cnz];
    //for(int i = 1; i <= n; i++)cout<<vis[i]<<endl;
    for(int i = 1; i <= n; i++){
        if(vis[i])rs++;//统计参加比赛的人数
        if(res[i] > key)cn++;//统计比cnz得分高的人数
    }
    cout<<key<<endl;
    printf("%d/%d\n",cn, rs);
    }
    else cout<<-1<<endl;

return 0;
}

6.处女座的测验(一)

算法:素数筛

题意:处女座进行了一场c语言的考试,要求很简单,输出2000个正整数,并且满足以下条件:

1.       任意两个数互质

2.     任意两个数x,y,满足,其中为n的因子的个数

思想:

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000000l;
int a[maxn], vis[maxn];
void Prime(){
     memset(vis, 0, sizeof(vis));
     for(int i =  2; i*i <= maxn; i++ ){
        if(!vis[i]){
            for(int j = i*i; j <= maxn; j += i){
                vis[j] = 1;
            }
        }
     }
}
int main(){
    Prime();
    int cn = 1;
    for(int i = 2;cn <= 4000; i++){
        if(!vis[i])a[cn++] = i;
    }
    for(int i = 1; i <= 2000; i++){
        cout<<a[i]*a[4000-i+1]<<endl;
    }
return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值