1. 程式人生 > >NOIP2018完爆總結

NOIP2018完爆總結

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、考慮特殊資料,偏騙分