NOIP2018完爆總結
阿新 • • 發佈:2018-12-27
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、考慮特殊資料,偏騙分