NOIP2018总结
没想到这次的NOIP数据能这么(强&水),本来是250:-)分的。。。。。。
第一道题(标题统计)老水了,strlen(s)<=5,我也没什么好说的
#include<cstdio>
#include<cstring>
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<cstdio>
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<iostream>要快一点
inline long long fabs(long long x) {
return x<0?-x:x;
}//用#include<cmath>快一点,但这样写更保险
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、考虑特殊数据,偏骗分