也是几百年没做CF咯,这场还是赛后做的,退化很多啦

A.Digital Counter

找规律 可能有火柴棍丢失,问你可能组成的数字有多少种,只需要肉眼看看每个数字填上火柴棍可能形成的数字,打个表就行了

#include <iostream>
#include <cstdio>
using namespace std;

const int pos[] = {2, 7, 2, 3, 3, 4, 2, 5, 1, 2};

int a, b;

int main()
{
#ifdef LOCAL
    freopen("495A.in", "r", stdin);
#endif
    a = getchar() - '0';
    b = getchar() - '0';
    printf("%d\n", pos[a]*pos[b]);
    return 0;
}

 

B. Modular Equations

一开始没读懂题意,还以为是同余...就是

a / x = y ... b  给你a,b让你求x的可能个数

因为b是余数,所以需要满足0<=b<x

和素数只需要检查到sqrt(x)差不多,这里只需要枚举到sqrt(a-b)

这个复杂度还是能接受的O(sqrt(a-b))

一开始很傻逼,从sqrt(a-b)枚举到a-b...瞬间爆炸...TLE

 

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;

const int MAXN = 1e5;
int a, b, cnt;
int pcnt[MAXN];
bool prime[MAXN];

int main()
{
#ifdef LOCAL
    freopen("495B.in", "r", stdin);
#endif
    scanf("%d%d", &a, &b);
    if(a < b)    printf("0\n");
    else if(a == b)    printf("infinity\n"); 
    else { 
        a -= b;
        for(int i = 1, t = sqrt(a); i <= t; i++) {
            if(a % i)    continue;
            int x = i, y = a/i;
            if(x > b)    cnt++;
            if(y > b)    cnt++;
            if(x > b && x == y)    cnt--;
        }
        printf("%d\n", cnt);
     }
    return 0;
}

 

C. Treasure

感觉就是贪心了...一开始想法傻逼了,还去细分讨论很多,把自己绕进去了

就是让前面的'#'填入1个')',最后一个填入剩下所需的')'

再跑一边检查一下有没有那个位置会使得')'个数多余'('个数

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
using namespace std;

const int MAXN = 1e5+10;

int mcnt, acnt, hpos, lpos, lh;
int	inf[MAXN];
char ins[MAXN];
bool possible = true;
queue<int> h;

void noAnswer()
{
	printf("-1\n");
	exit(0);
}

int main()
{
#ifdef LOCAL
	freopen("495C.in", "r", stdin);
#endif
	scanf("%s", ins);
	for(int i = 0, t = strlen(ins); i < t; i++) {
		if(ins[i] == '(')	mcnt++;
		else if(ins[i] == ')')	mcnt--;
		else {
			lh = i;
			mcnt--;
			inf[i] = 1;
			h.push(i);
		}	
	}		
	if(mcnt < 0)	noAnswer();
	inf[lh] += mcnt;	
	mcnt = 0;
	for(int i = 0, t = strlen(ins); i < t; i++) {
		if(ins[i] == '(')	mcnt++;
		else if(ins[i] == ')')	mcnt--;
		else mcnt -= inf[i];
		if(mcnt < 0)	noAnswer();	
	}
	while(!h.empty()) {
		printf("%d\n", inf[h.front()]);
		h.pop();
	}
	return 0;
}

 

D.Obsessive String

感觉CF的D题是足以制裁我了呢...KMP早就忘光了 更别说还要DP了 有空写写吧~

 

  ABC做下来感觉细节还是蛮多的,不知道是因为自己退化了,还是这次比赛偏细节

posted on 2014-12-18 00:14  Gemmeg  阅读(178)  评论(0编辑  收藏  举报