今天下午打的这场,打了两个小时就过了A题,是真的菜....B题样例过了但是一直wa,不知道为啥
我现在困死,中午没睡觉....刚才睡了10分钟然后现在又开始写了..
规律题目
有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;
}
感觉这题好难啊....规律一直找不出来,只能硬着头皮想,赛后反思了下,还是自己的的思路不太清晰,打的草稿太潦草了,好好画图我感觉应该能想出来吧(自我否定...)
我们选择长度后,其特定长度会构成一个正方形,因为点与点距离大于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:失败总是贯穿人生始终