Codeforces Round #372 (Div. 2)

A. Crazy Computer

题意:如果b - a ≤ c,那么屏幕上的这两个数都会存在,如果b - a > c屏幕上的所有数都消失,输出最后在屏幕上剩下几个数、

思路:直接模拟、

这题- -、 最后居然被人叉了、 确实我题目完全没看懂 但我A了、注意这句话:If b - a > c, theneverything on the screen disappears and after that the word you have typed appears on the screen.

#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<utility>
using namespace std;
typedef long long ll;
const int qq = 1e5+10;
int n;
ll num[qq];
int main(){
	ll n,c;scanf("%lld%lld",&n, &c);
	int cnt=0;
	ll a,b=0;
	for(int i=1; i<=n; ++i){
		scanf("%lld",&a);
		if(a>b+c)	cnt=0;
		cnt++;
		b=a;
	}	
	printf("%d\n", cnt);
	return 0;
}

B. Complete the Word

题意:问连续的长度为26的子串里面是否存在从A到Z的所有不同的单词

思路:brute force  O(26*s)

vis数组没清空真的WA哭我了、

#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<utility>
using namespace std;
typedef long long ll;
const int qq = 1e5+10;
char str[qq];
int vis[30];
int lack[30];
int main(){
	scanf("%s",str);
	int len=strlen(str);
	//printf("%d\n", len);
	if(len<26){
		printf("-1\n");
		return 0;
	}
	int kind = 0;
	int l=0;
	int flag=0;
	for(int i=0; i<len-25; ++i){
		int kind=0;
		for(int j=i; j<i+26; ++j)
			if(str[j]=='?')	kind++;
			else{
				if(!vis[str[j]-'A'])	kind++;
				vis[str[j]-'A']++;
			}
		if(kind==26){
			char lack[30];
			int p=0;
			for(int k=0; k<26; ++k)
				if(!vis[k])	lack[p++] = k+'A';
			int c=0;
			for(int k=0; k<26; ++k)
				if(!vis[k])	c++;
			if(c!=p)	continue;
			c=0;
				for(int k=i; k<i+26; ++k)
					if(str[k]=='?')	str[k]=lack[c++];
			flag = 1;
			break;
		}
		memset(vis, 0, sizeof(vis));
	}
	if(!flag)	printf("-1\n");
	else{
		for(int i=0; i<len; ++i)
			if(str[i]=='?')	str[i] = 'C';
		printf("%s\n", str);
	}
	return 0;
}

C. Plus and Square Root

题意思路:传送门

#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<utility>
using namespace std;
typedef long long ll;
const int qq = 1e5+10;
ll num[qq];
int main(){
	ll n;scanf("%lld",&n);
	printf("2\n");
	for(ll j=2; j<=n; ++j)
		printf("%lld\n", j*(j+1)*(j+1)-(j-1));
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值