noip 2018 结题报告(未完成)

2 篇文章 0 订阅
1 篇文章 0 订阅

T1 (史上最shui的第一题
数据:五个字符(大小写字母,数字,空格以及换行符)

本蒟蒻考试时,用的是getchar(),一个一个读;判断如果是大小写字母,数字就ans++,否则如果不是空格就跳出

附上代码:

#include<cstdio>
#include<cstring>
using namespace std;
int ans;
int main()
{
    for(int i=0;i<5;i++)
    {
        char p=getchar();
        if((p<='z' && p>='a')||(p<='9'&&p>='0')||(p<='Z'&&p>='A'))
            ans++;
        else
        {
            if(p!=' ')
             break;
        }
    }
    printf("%d",ans);
    return 0;
}

或用getline(cin, );
介绍一下<cctype>

这个头文件下有许多函数,可以直接调用

isalnum:判断字符是否为字母数字

isalpha:判断字符是否为字母

isdigit:判断字符是否为十进制数

islower:判断字符是否为小写字母

isupper:判断字符是否为大写字母

ispunct:判断字符是否为标点

tolower:将大写字母转成小写

toupper:将小写字母转成大写

……
 

#include<cstring>
#include<cctype>
#include<iostream>
using namespace std;
int ans;
int main()
{
    string a;
    getline(cin,a);
    for(int i=0;i<a.length();i++)
        if(isalnum(a[i]))    
            ans++;
    printf("%d",ans);
    return 0;
}

 T2

数据:要开long long;
 
直接算出左右两边的气势差,枚举气势小的一边,维护左右两边气势差最小就行了。
一开始要让p2=m,因为可能会有加上s2*abs(i-m),左右两边的气势差更大的情况(考试时忘记了,于是就呵呵了)。

代码:


#include<cstdio>
#include<cmath>
using namespace std;
long long n,m,s1,p1,s2,a[100001];
int main()
{
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
        scanf("%lld",&a[i]);
    scanf("%lld%lld%lld%lld",&m,&p1,&s1,&s2);
    a[p1]+=s1;
    long long lj=0,rj=0;
    for(int i=1;i<m;i++)
        lj+=a[i]*(m-i);
    for(int i=m+1;i<=n;i++)
        rj+=a[i]*(i-m);
    long long o=abs(lj-rj); 
    long long p2=m;
    if(lj<rj)
        for(int i=1;i<m;i++)
        {
            long long  temp=s2*(m-i)+lj;
            if(abs(temp-rj)<o)
            {
                p2=i;
                o=abs(temp-rj);
            }
        }
    else
        if(lj>rj)
            for(int i=m+1;i<=n;i++)
            {
                long long temp=s2*(i-m)+rj;
                if(abs(temp-lj)<o)
                {
                    p2=i;
                    o=abs(temp-lj);
                }
            }
    printf("%lld\n",p2);
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值