星星之火OIer:NOIP2018完爆总结

NOIP2018总结

没想到这次的NOIP数据能这么(强&水),本来是250:-)分的。。。。。。
第一道题(标题统计)老水了,strlen(s)<=5,我也没什么好说的

#include
#include
char s[105];
int n,l,i;
inline void pr(int x) {//快输不解释
	if(x>9)pr(x/10);
	putchar(x%10+48)//0对应的ASCII码值为48
}
int main() {
    gets(s);
    l=strlen(s);
    for(i=0;i<l;i++)
        if(s[i]!=' ')//除去空格的情况
            n++;
	pr(n);
}

第二道题龙虎斗数据是真的水。。。。。。竟然没有那种用常数算法大于n时取n,小于0时取0的情况。。。。。。所以我位置→_→的仁兄考了242。。。表示不服。。。
先上代码,解释在代码中

#include
inline void read(long long &x) {
    x=0;
    int f=1;
    char s=getchar();
    while(s<'0'||s>'9') {
        if(s=='-')
            f=-1;
        s=getchar();
    }
    while(s>='0'&&s<='9') {
        x=x*10+s-48;
        s=getchar();
    }
    x*=f;
}
inline void pr(long long x) {
    if(x<0)
        putchar('-'),x=-x;
    if(x>9)
        pr(x/10);
    putchar(x%10+48);
}//快读快输不解释
inline long long min(long long x,long long y) {
    return x<y?x:y;
}//本人亲身经历用#include要快一点
inline long long fabs(long long x) {
    return x<0?-x:x;
}//用#include快一点,但这样写更保险
long long a[100005],n,k,m,p,s2,s1,ans,dra,tig,minn=2147483647,wz,i,j;//本人很懒,干脆全部开long long
int main() {
    minn++;//不知道为什么在全局定义是最大只能开2147483647,所以为了保险只能这样写
    minn=minn*minn*2-1;
    read(n);
    for(i=1; i<=n; i++)
        read(a[i]);
    read(m),read(p),read(s1),read(s2);
    for(i=1; i<m; i++)
        dra=dra+(m-i)*a[i];//计算龙方的气势,dragon->龙
    for(i=m+1; i<=n; i++)
        tig=tig+(i-m)*a[i];//计算虎方的气势,tiger->虎
    if(p>m)
        tig=tig+(p-m)*s1;
    else
        dra=dra+(m-p)*s1;//加兵营这一段可以在前面处理一下
    if(dra>tig)
        for(i=m; i<=n; i++) {
            if(fabs(tig+(i-m)*s2-dra)<minn)
                minn=fabs(tig+(i-m)*s2-dra),wz=i;
        }
    else
        for(i=1; i<=m; i++)
            if(fabs(dra+(m-i)*s2-tig)<minn)
                minn=fabs(dra+(m-i)*s2-tig),wz=i;//这里可以合并
    pr(wz);
}

第三题还没有解出来,但大概就是DP嘛,有兴趣可以点击
这道题数据是真的强,我只骗了10分

最后一道题大概就是暴搜嘛,从根部开始搜,但我的代码很复杂,有兴趣请点击

总结几点:
1、考虑要完全,所有测试点都要考虑到
2、不会的题,先想暴搜。
3、考虑特殊数据,偏骗分

你可能感兴趣的:(个人总结,搜索,编程总结)