Educational Codeforces Round 145 (Rated for Div. 2)

今天下午打的这场,打了两个小时就过了A题,是真的菜....B题样例过了但是一直wa,不知道为啥

我现在困死,中午没睡觉....刚才睡了10分钟然后现在又开始写了..

A:Problem - A - Codeforces

规律题目

有4个颜色相同的不能全部打开,输出-1;

有3个颜色相同的需要6次

其他情况需要4次

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
#include<stack>
#include<deque>
#include<vector>
#include<map>
#include<set>
#include <utility>
using namespace std;
typedef  long  long ll ;
#define pii pair<int,int>
const int inf = 0x3f3f3f3f;//106110956
inline int read(){
    int x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9'){
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9'){
        x = (x<<1) + (x<<3) + (ch^48);
        ch = getchar();
    }
    return x * f;
}
void print(__int128 num) {
	if(num) {
		print(num/10);
		putchar(num%10+'0');
	}
}
ll ex_gcd(ll a,ll b,ll& x,ll& y){
	if(b==0){
		x=1;
		y=0;
		return a;
	}

	ll d=ex_gcd(b,a%b,y,x);
	y=y-a/b*x;
	return d;
}
int a[15];
int t;
string s;
int main(){
	scanf("%d",&t);
	while(t--){
		cin>>s;
		 
		for(int i=0;i<=10;i++){
			a[i]=0;
		}
		for(int i=0;i<=3;i++){
			a[s[i]-'0']++;
		}
		int maxn=0;
		for(int i=0;i<=9;i++){
			maxn=max(maxn,a[i]);
		}
		if(maxn==4){
			printf("-1\n");
			continue;
		}
		if(maxn==3){
			printf("6\n");
			continue;
		}
		printf("4\n");
	}


	return 0;
}


B:Problem - B - Codeforces

感觉这题好难啊....规律一直找不出来,只能硬着头皮想,赛后反思了下,还是自己的的思路不太清晰,打的草稿太潦草了,好好画图我感觉应该能想出来吧(自我否定...)

我们选择长度后,其特定长度会构成一个正方形,因为点与点距离大于1,所以偶数的正方形里面只能包含偶数的正方形,奇数的包含奇数。通过画图(可惜我没画仔细,潦草画了画..)

设cnt[n]为abs(x)+abs(y)小于等于n的点的个数,

当n为偶数时候:cnt[0]=1,cnt[2]=9,cnt[4]=25

cnt[1]=4,cnt[3]=16,cnt[5]=36

所以cnt[n]=(n+1)*(n+1)

然后就很容易了...

如果(int)sqrt(n)*(int)sqrt(n)==n,那么输出n-1,否则输出n

结果我写的时候一直wa..

AC代码:

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
#include<stack>
#include<deque>
#include<vector>
#include<map>
#include<set>
#include <utility>
using namespace std;
typedef  long  long ll ;
#define pii pair<int,int>
const int inf = 0x3f3f3f3f;//106110956
inline int read(){
    int x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9'){
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9'){
        x = (x<<1) + (x<<3) + (ch^48);
        ch = getchar();
    }
    return x * f;
}
void print(__int128 num) {
	if(num) {
		print(num/10);
		putchar(num%10+'0');
	}
}
ll ex_gcd(ll a,ll b,ll& x,ll& y){
	if(b==0){
		x=1;
		y=0;
		return a;
	}

	ll d=ex_gcd(b,a%b,y,x);
	y=y-a/b*x;
	return d;
}
int t;
ll n;
int main(){
	scanf("%d",&t);
	while(t--){		
		scanf("%lld",&n);
		ll m=sqrt(n);
		if(m*m<n){
			cout<<m<<endl;
		}else{
			cout<<m-1<<endl;
		}		
	}
	
	return 0;
}

错误代码:m*m==n就不对了...小于号就对了,不知道为啥

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
#include<stack>
#include<deque>
#include<vector>
#include<map>
#include<set>
#include <utility>
using namespace std;
typedef  long  long ll ;
#define pii pair<int,int>
const int inf = 0x3f3f3f3f;//106110956
inline int read(){
    int x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9'){
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9'){
        x = (x<<1) + (x<<3) + (ch^48);
        ch = getchar();
    }
    return x * f;
}
void print(__int128 num) {
	if(num) {
		print(num/10);
		putchar(num%10+'0');
	}
}
ll ex_gcd(ll a,ll b,ll& x,ll& y){
	if(b==0){
		x=1;
		y=0;
		return a;
	}

	ll d=ex_gcd(b,a%b,y,x);
	y=y-a/b*x;
	return d;
}
int t;
ll n;
int main(){
	scanf("%d",&t);
	while(t--){		
		scanf("%lld",&n);
		ll m=sqrt(n);
		if(m*m==n){
			cout<<m-1<<endl;
		}else{
			cout<<m<<endl;
		}		
	}
	
	return 0;
}

showermaker:失败总是贯穿人生始终

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值