复赛前的复习

整体

大致以做题为主

建议由易到难,基础的东西先做,技巧性的后做,最大化效率

注意看之前的总结

沉下去,会精彩

具体

模拟

luoguP3952 时间复杂度

信了樊某某的鬼,挑战这一神题简单题目

其实还挺好玩的....我觉得打for总错的同学做这题会简单一点...

我实在不想写解析了(估计也没人看)(代码也丑....

就写写自己的收获吧:(我基础差,勿喷

  1. string 类型的变量a,b ,在size相等的情况下可以直接用<``=>等判大小,size不等时,根据size, 返回大小关系
  2. char 类变量虽然能够赋初值为'15'这个样的两位,但是在输入的时候还是只能读单个字符
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;

int t, n, tot;
string o, st, ed;
char tmp, x, is[30];
int fcnt, ecnt, tag;//tag判断for循环是否进行的下去 
int t_f, zhishu, tmp_zhishu, lazy_zhishu;
//t_f: true or false判断语句是否合法,tmp_zhishu保存每大组for之后的指数 ,lazy_zhishu:保存每大组中小组完结的数 

void pre() {
    tot = tag = lazy_zhishu = tmp_zhishu = zhishu = fcnt = ecnt = t_f = 0;
    for(int i = 1; i < 30; ++i) is[i] = 0;
}

int find(char x) {//优化? 直接找吧 
    for(int i = 1; i < tot; ++i) if(is[i] == x) return 1;
    return 0;
}
int smaller(string st, string ed) {
    if(st[0] != 'n'){
        if(ed[0] == 'n') return 1;
        else if(ed.size()>st.size() || (ed.size()==st.size() && ed>st)) return 0;//注意string 
        return -1;//返回-1: 并不能进入for,所以不能更新tmp_zhishu 
    } else {
        if(ed[0] == 'n') return 0;
        return -1;
    }
}

void print_ans() {
    if(t_f) {
        printf("ERR\n");//注意坑人大小写 
        return ;
    }
    if(zhishu==0){
        if(o[2]=='1') printf("Yes\n");
        else printf("No\n");
    } else {
        if(zhishu<10 && o[4]-'0'==zhishu) printf("Yes\n");
        else if(zhishu<100 && (o[4]-'0')*10+(o[5]-'0')==zhishu) printf("Yes\n");
        else if(zhishu<1000 && (o[4]-'0')*100+(o[5]-'0')*10+(o[6]-'0')==zhishu) printf("Yes\n");
        else printf("No\n");
    }
}
int main() {
    scanf("%d",&t);
    while(t--) {
        pre();
        scanf("%d",&n);
        cin>>o;
        for(int i = 1; i <= n; ++i) {
            cin>>tmp;
            if(tmp=='F') {
                fcnt += 1;
                cin>>x>>st>>ed;
                if(find(x) == 1) t_f = 1;
                else is[++tot] = x;
                int fhz = smaller(st, ed);
//                printf("fhz:   %d\n",fhz);
                if(fhz == 1 && tag==0 && lazy_zhishu==0) ++tmp_zhishu;
                else if(fhz == -1) ++tag;
                if(lazy_zhishu) lazy_zhishu -= 1;//放后面 
            } 
            else if(tmp=='E') {
                ecnt += 1;
                tot -= 1;//一个for完了,它这个参数就可用了 
                if(tag) tag -= 1;
                lazy_zhishu += 1;
                if(ecnt == fcnt) zhishu = max(zhishu, tmp_zhishu), tmp_zhishu = 0,lazy_zhishu = 0/*,printf("   %d\n", zhishu)*/;
                if(ecnt > fcnt) t_f = 1;
                //计算每份的zhishu,并为重开的一大组for赋lazy-zhishu 
            }
        }
        if(ecnt != fcnt) t_f = 1;
        print_ans();
    }
    return 0;
}

搜索

贪心

数据结构

数论

其它

猜你喜欢

转载自www.cnblogs.com/tyner/p/11704418.html