[考试反思]0813NOIP模拟测试20
咕了两天,补一下。
4个AK的,210是第10,190的第15并列一大排,我个傻子160排第29。
历史新低,但是心态还好。
真是没想到会一天考两场。中午没回去睡觉晚上考试。。。
困倒是其次,关键还是达哥出题,心里一紧。
6:20开始。匆匆忙忙吃饭赶上开题。
T1是一个水的不行的枚举状态(二进制表示/搜索硬干都可以)
久久难以相信居然会这么水,想到上午CE丢的3首杀AK。。。想也是白想。。。
然而终于开始打了,17分钟完事。为了表示对达哥的尊重还把变量名和题目里那个超长的名字打的一样(还加了下划线)
1 #include<bits/stdc++.h> 2 using namespace std; 3 long long Level_ZS=0,a[16],b[16],c[16],d[16];int n; 4 int main(){ 5 scanf("%d",&n); 6 for(int i=1;i<=n;++i)scanf("%lld%lld%lld%lld",&a[i],&b[i],&c[i],&d[i]); 7 for(int st=0;st<1<<n;++st){ 8 long long Level_WHK=0,Level_OI=0; 9 for(int i=0;i<=15;++i) 10 if(st&1<<i)Level_WHK+=a[i],Level_OI=max(Level_OI-b[i],0ll); 11 else Level_WHK=max(Level_WHK-d[i],0ll),Level_OI+=c[i]; 12 Level_ZS=max(Level_ZS,Level_WHK*Level_OI); 13 } 14 printf("%lld\n",Level_ZS); 15 }
然而我打爆了orz对不起达哥。
整个状态错位了,少个+1。加上就A了。能骗80分可真高!
T2,研究一个小时,不会。人家半个小时就切掉了,然而我连第一条性质都没有发现:
无环时,联通快数=点数-边数。
然后就只剩下了一个傻子二维前缀和。极水,可是我卡在了第一步。
然后没办法啊,打暴力呗!部分分有70呢!
1 #include<cstdio> 2 int q,n,m,x1,x2,y1,y2,st[3][2002],ed[3][2002],ans;char s[2002][2002]; 3 const int xx[4]={0,-1,1,0},yy[4]={-1,0,0,1}; 4 void dfs(int x,int y){ 5 s[x][y]='0'; 6 for(int i=0;i<4;++i)if(x+xx[i]>=x1&&x+xx[i]<=x2&&y+yy[i]>=y1&&y+yy[i]<=y2&&s[x+xx[i]][y+yy[i]]=='1')dfs(x+xx[i],y+yy[i]); 7 } 8 int main(){ 9 scanf("%d%d%d",&n,&m,&q); 10 for(int i=1;i<=n;++i)scanf("%s",s[i]+1); 11 if(q==1){ 12 scanf("%d%d%d%d",&x1,&y1,&x2,&y2); 13 for(int i=x1;i<=x2;++i)for(int j=y1;j<=y2;++j)if(s[i][j]=='1')ans++,dfs(i,j); 14 printf("%d\n",ans); 15 return 0; 16 } 17 if(n==1){ 18 for(int i=1;i<=m;++i){ 19 if(s[1][i]=='1'&&s[1][i-1]!='1')st[1][i]++; 20 if(s[1][i]=='1'&&s[1][i+1]!='1')ed[1][i]++; 21 st[1][i]+=st[1][i-1];ed[1][i]+=ed[1][i-1]; 22 } 23 for(int i=1;i<=q;++i){ 24 scanf("%d%d%d%d",&x1,&y1,&x2,&y2); 25 printf("%d\n",st[1][y2]-ed[1][y1-1]); 26 } 27 return 0; 28 } 29 if(n==2){ 30 for(int i=1;i<=m;++i){ 31 if(s[1][i]=='1'&&s[1][i-1]!='1')st[1][i]++; 32 if(s[1][i]=='1'&&s[1][i+1]!='1')ed[1][i]++; 33 st[1][i]+=st[1][i-1];ed[1][i]+=ed[1][i-1]; 34 if(s[2][i]=='1'&&s[2][i-1]!='1')st[2][i]++; 35 if(s[2][i]=='1'&&s[2][i+1]!='1')ed[2][i]++; 36 st[2][i]+=st[2][i-1];ed[2][i]+=ed[2][i-1]; 37 if(((s[1][i]=='1'&&s[1][i+1]!='1')||((s[2][i]=='1'&&s[2][i+1]!='1')))&&!((s[1][i]=='1'&&s[1][i+1]=='1')||(s[2][i]=='1'&&s[2][i+1]=='1')))ed[3][i]++; 38 if(((s[1][i]=='1'&&s[1][i-1]!='1')||((s[2][i]=='1'&&s[2][i-1]!='1')))&&!((s[1][i]=='1'&&s[1][i-1]=='1')||(s[2][i]=='1'&&s[2][i-1]=='1')))st[3][i]++; 39 st[3][i]+=st[3][i-1];ed[3][i]+=ed[3][i-1]; 40 } 41 for(int i=1;i<=q;++i){ 42 scanf("%d%d%d%d",&x1,&y1,&x2,&y2); 43 if(x1==x2)printf("%d\n",st[x2][y2]-ed[x1][y1-1]); 44 else printf("%d\n",st[3][y2]-ed[3][y1-1]); 45 } 46 return 0; 47 } 48 }
所以就40了。
低错就是数组用到了3而只开了3的数组,考后瞬间+30。
还在犯刚学OI两个月时的错误。。。我。。。我好开心啊
T3花了90分钟发现这是一个求逆序对的傻子题啊!
我才是傻子!花了90分钟!!!
所以没打完,又交了个暴力。
一晚上就这么结束了。
与其在这里吐槽,不如好好写题解去吧。
但是还是有一点经验可以吸取,刚好应上了教练说的话:
考试不要立flag也不要有期望,稳住心态千万不能有畏难情绪。
考得最烂就考得最烂吧。已经炸得麻木了。
然而这有什么大不了的呢?下次翻盘就是了呗。
希望所有正在成绩下滑的人都能明白这点挫折其实就是最好的奖赏。
心态是在爆炸时得以提高的,你现在不炸,要等到NOIp考场上吗?
$Fate \ is \ Fake$