考试总结

今天的考试,其实至少应该得到180分的,可是我却爆零了,的确还是很不开心的。

刚拿到题,我先读了一遍,觉得第一,三题大概可以暴力骗点分,而第二题则应该是用某种玄学的排序方式A掉,于是就先开始打暴力解法。然而,两道题都在写到一半的时候,想出了一些玄学的毒瘤优化,就不假思索地加了上去,结果这两个优化却都不优美,我都多多少少没想到一些东西,于是就完美的丢掉了130分。考完之后的我听了 川大附小三年级四班 的易健驰的讲解恍然大悟,惊呼“毒瘤优化不可取!”,觉得十分的难过,因为自己没有认真考虑,而导致丢分,这对于我这种零基础选手是万万不可的,以后一定要杜绝这种感觉写出来了就洋洋得意,不知所措,乱加优化的毛病。

在我加完了毒瘤优化之后,时间已经只剩不到一个小时,这使我十分的慌乱,想要大呼苟利国家生死以以来增加写题速度,就赶快开始打第二题。可是即使这样我也是能得50分的。不巧的是,我把所有的“Yes”和“No”都写成了“YES”和“NO”,也让我最终爆零。

总结经验,继往开来,作为一个零基础选手,我要时刻戒骄戒躁,一定不能太得意,但同时也要充满信心,相信简单题随便做才是拉开差距最主要的因素,争取今年noip一等奖。

另外,我虽然思维灵活,可是有时比一定能考虑完全,这周做虫食算的时候也没有考虑完所有的因素,才让我卡了十几分钟,因此我更要发展我的思维,并熟练自己的代码能力。

洛谷1092 虫食算

题目     首先,我们只考虑加法的虫食算。这里的加法是N进制加法,算式中三个数都有N位,允许有前导的0。

            其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。如果这个算式是N进制的,我们             就取英文字母表午的前N个大写字母来表示这个算式中的0到N-1这N个不同的数字:但是这N个字母并不一定顺序地代表0到N-1)。输入数据保证N个字母分别至少出现一               次。

            输入格式:

            包含四行。第一行有一个正整数N(N<=26),后面的3行每行有一个由大写字母组成的字符串,分别代表两个加数以及和。这3个字符串左右两端都没有空格,从高位到低                   位,并且恰好有N位。

            输出格式:

            包含一行。在这一行中,应当包含唯一的那组解。解是这样表示的:输出N个数字,分别表示A,B,C……所代表的数字,相邻的两个数字用一个空格隔开,不能有多余             的空格。

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

//题解?    tan90

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
int n,a[30];
char s[4][30];
bool vis[30];
int change(char c) {return c-'A'+1;}
void dfs(int h,int l,int jin) { // 行 // 列 // 进位 //从上到下,从右到左dfs
 if(l==0) { //扫完了
  if(jin==0) {
   for(int i=1; i<=n; i++)printf("%d ", a[i]);
   exit(0);
  }
  return;
 }
 for(int i=l-1; i>=1; i--) { //剪枝
  int jia1=a[change(s[1][i])];
  int jia2=a[change(s[2][i])];
  int he=a[change(s[3][i])];
  if(jia1==-1||jia2==-1||he==-1) continue;
  if((jia1+jia2)%n!=he&&(jia1+jia2+1)%n!=he) return;
 }
 if(a[change(s[h][l])]!=-1) {
  if(h!=3)dfs(h+1,l,jin);
  else {
   int he=a[change(s[1][l])]+a[change(s[2][l])]+jin;
   if(he%n!=a[change(s[3][l])])return;
   dfs(1,l-1,he/n);
  }
 } else {
  for(int i=n-1;i>=0;i--){//枚举这一位的数
   if(!vis[i]){
    if(h==3){
     int he=a[change(s[1][l])]+a[change(s[2][l])]+jin;
     if(he%n!=i)continue;
     vis[i]=1;a[change(s[3][l])]=i;//赋值,标记这个数用过
     dfs(1,l-1,he/n);
     vis[i]=0;a[change(s[3][l])]=-1;//赋值,标记这个数用过
    }
    else {
     a[change(s[h][l])]=i;vis[i]=1;
     dfs(h+1,l,jin);
     a[change(s[h][l])]=-1;vis[i]=0;
    }
   }
  }
 }
}
int main() {
 scanf("%d", &n);
 for(int i=1; i<=3; i++) scanf("%s", &s[i]+1);
 memset(a,-1,sizeof(a));
 dfs(n,1,0);
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值