10.15考试总结

10.15考试总结

有掉分的情况所以很不理想,将一个减号写成了一个成乘号
分析了一下主要是:思维混乱,还有样例太水,以后应该,先确定思路,证明所发正确性,不要将不必要的失误引入程序中,在刚开始就避免它
一定要将细节写在纸上,注意边界,还有可以多做一些样例,不要再写完程序时再出数据卡程序(可也是要的),但是刚开始就想好所有极端情况,可以有效地避免很多错误
A.蝴蝶效应(FFT)
code:
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
const int MAXX = (1 << 25);
int f[MAXX];
int n, k, Seed, ans;
inline void init() {
	int x = (1 << k);
	for(int i = 1;i < x;++i)
		f[i] = (f[i >> 1] >> 1) | ((i & 1) << (k - 1));
}
int my_rand() { 
	Seed = ( 214013LL * Seed + 2531011 ) & ((1 << k) - 1); 
	return Seed;
}
void my_hash(int x) { 
	ans = ((long long) ans * 233 + x)%99824353;
}
int main() {
	freopen("replace.in", "r", stdin);
	freopen("replace.out", "w", stdout);
	scanf("%d%d%d",&n,&k,&Seed);
	init();
  for(int i = 1; i <= n; ++i){
  	my_hash(f[my_rand()]);
  }
  printf("%d",ans);
	return 0;
}
B.string (manacher + 记录)

板子没打熟 + 细节处理不到位 + 思路混乱 + 没有证明正确性 + 边打边写:导致 掉了 80 分

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXX = 1000010;
char s[MAXX << 1],ss[MAXX << 1];
int f[MAXX << 1],len,t,dp[MAXX << 1];
inline void change(){
    len = (strlen(s) << 1) + 1;
    for(int i = 0;i < len;++i)
    if(!(i % 2))ss[i] = '#';
    else ss[i] = s[((i - 1) >> 1)];
}
inline void manacher(){
    int mr,mid,ans;
    mr = mid = ans = 0;
    for(int i = 0;i < len;++i){
    if(i < mr)f[i] = min(f[(mid << 1) - i],mr - i);
    else f[i] = 1;
    while((i - f[i] >= 0) && ss[i + f[i]] == ss[i - f[i]])f[i]++;
    if(f[i] + i > mr){
        mr = f[i] + i;
        mid = i;
     }
   }
}
int main(){
    freopen("string.in","r",stdin);
    freopen("string.out","w",stdout);
    scanf("%d",&t);
    while(t--){
    scanf("%s",s);
    len=0;
    change();
    manacher();
    for(int i = len -1 ;i >= 0;--i){
        if(!(i & 1))continue;
        if(f[i] + i == len||(dp[i + f[i] - 2] && i - f[i] + 1 == 0))dp[i]=1;
    }
    for(int i = 1;i < len ;i += 2){
        if(dp[i])printf("%d ",(i+1)>>1);
        dp[i]=0;
    }
    for(int i=0;i<len;++i){
        f[i]=dp[i]=0;
        s[i]='0';ss[i]='0';
    }
    printf("\n");
   }
    fclose(stdin);
    fclose(stdout);
    return 0; 
}
posted @ 2018-10-17 06:50  ART_coder  阅读(30)  评论(0编辑  收藏  举报