A.游戏

链接:https://www.nowcoder.com/acm/contest/210/A
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

BLUESKY007,fengxunling和dreagonm三个人发现了一个像素游戏,这款神奇的游戏每次会生成一个nxm的网格,其中每一个格子都被随机染色为R,G,B三种颜色之一,每次都可以选择任意一个非B颜色的格子进行一次操作,每次操作都会满足以下规则:
1.操作的范围为从整个网格的左上角到选定方格的矩形区域

2.操作区域内所有方格都遵循牛客OI周赛2-提高组-LMLPHP变换
3.第一个不能执行操作的人为失败者,且按操作顺序在失败者之前的人取胜
为了能让BLUESKY007感到快乐(照顾到BLUESKY007是个蒟蒻),fengxunling和dreagonm的操作都尽可能的让BLUESKY007取胜,她们想知道在操作顺序为牛客OI周赛2-提高组-LMLPHP的情况下,失败者是谁.

输入描述:

题目有多组数据
第一行一个整数t,表示数据组数
对于每组数据,第一行两个整数n,m,接下来n行每行m个字符

输出描述:

输出共t行,每行一个字符串表示答案
输入例子:
2
3 3
RGG
BBG
RRR
3 3
GRB
RGR
RBG
输出例子:
dreagonm
fengxunling

-->

示例1

输入

2
3 3
RGG
BBG
RRR
3 3
GRB
RGR
RBG

输出

dreagonm
fengxunling

备注:

对于

牛客OI周赛2-提高组-LMLPHP

的数据,

牛客OI周赛2-提高组-LMLPHP

对于另

牛客OI周赛2-提高组-LMLPHP

的数据,

牛客OI周赛2-提高组-LMLPHP

对于

牛客OI周赛2-提高组-LMLPHP

的数据

牛客OI周赛2-提高组-LMLPHP

 
/*
题目描述写的很清楚,三个人的操作都是为了
BLUESKY007能赢,所以游戏一定会结束,那么当横纵坐标最大的非 B 颜色方格变为 B 颜
色时,可操作的方格范围显然是趋向收敛的,又因为操作规则的要求,左上角的方格在每
次操作中都会按规则进行变换,当可操作范围收敛到左上角且左上角变为 B 颜色时,游
戏结束,所以无论中间的操作是怎样进行的,最终左上角的方格一定会变为 B 颜色,而且
进行操作的人数和操作变换长度相同,所以只需要判断左上角方格的颜色即可
*/
#include<bits/stdc++.h> using namespace std;
char maze[+][+]; int main()
{
int t;
cin>>t;
int n,m;
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=; i<n; i++)
{
cin>>maze[i];
}
if(maze[][]=='R') puts("dreagonm");
else if(maze[][]=='G') puts("fengxunling");
else puts("BLUESKY007");
}
}

B.水果蛋糕

链接:https://www.nowcoder.com/acm/contest/210/B

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

BLUESKY007要过生日了,为此朋友们准备给她买一个n*m的水果蛋糕qwq,但是在订蛋糕的时候却出现了问题:
蛋糕是方形的,因为水果颗粒放整齐才好看,所以水果颗粒必须按行按列地摆放(也就是如果建立平面直角坐标系,它们的坐标必须都是整数)。
她的朋友们想要蛋糕店多放点水果,但是由于摆放得太密集也不好看qwq,所以蛋糕店拒绝在和任意的水果颗粒相距牛客OI周赛2-提高组-LMLPHP的地方摆放水果颗粒。
她的朋友们想知道蛋糕上最多能摆放多少水果颗粒,但是由于她们没有BLUESKY007聪(rui)慧(zhi),所以她们找到了你来帮忙

输入描述:

一行两个正整数n,m

输出描述:

一行一个整数表示答案
输入例子:
1 4
输出例子:
4

-->

示例1

输入

1 4

输出

4
示例2

输入

3 4

输出

10

备注:

牛客OI周赛2-提高组-LMLPHP
 
如图所示,左图为样例1的实现方案,右图为样例2的实现方案之一
对于10%的数据,n,m≤ 5
对于20%的数据,min(n,m)≤3,n,m≤10
对于100%的数据,n,m≤ 10

/*
规律题
*/
#include<bits/stdc++.h> using namespace std;
int n,m; int main()
{
scanf("%d%d",&n,&m);
if(n<||m<){printf("%lld\n",1ll*n*m);return ;}
if(n>m)swap(n,m);
if(n==&&m==){puts("");return ;}
if(n==&&m==){puts("");return ;}
if(n==)
{
int t=m/,r=m%;
long long ans=2ll*m;
if(r==||r==)ans+=*r;
else if(r==||r==)ans+=;
else if(r==)ans=12ll*(t+);
printf("%lld\n",ans);
return ;
}
if(n==)
{
int t=m/,r=min(,m%);
long long ans=m+6ll*t+2ll*r;
printf("%lld\n",ans);
return ;
}
cout<<(1ll*n*m+)/<<endl;
return ;
}

牛客OI周赛2-提高组-LMLPHP

牛客OI周赛2-提高组-LMLPHP

牛客OI周赛2-提高组-LMLPHP

C.好朋友

链接:https://www.nowcoder.com/acm/contest/210/C
来源:牛客网

时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

BLUESKY007有很多关系很好的朋友,他们无一例外,名字均由数字组成(首字符不为0)且含有"007"(例如“10007”,“10707”就是她的好朋友,而“97037”,“70709”不是),即对于字符串s存在i,j,k(i< j< k)满足牛客OI周赛2-提高组-LMLPHP
虽然BLUESKY007眼力极佳,一眼就能看出一个人是不是自己的好朋友,但BLUESKY007是个蒟蒻,她并不擅长数数,但她又想知道在[l,r]内有多少人是自己的好朋友,所以就找到了你来帮忙.
她会向你询问t次,由于询问次数可能很多,所以你只需要告诉她t次询问答案的异或和即可.

输入描述:

第一行一个整数t,表示询问个数 
接下来t行,每行两个整数l

,r

输出描述:

一行一个整数表示答案

输入例子:
3
1 1000
233 666
999 999
输出例子:
0

-->

示例1

输入

3
1 1000
233 666
999 999

输出

0

说明

在0~1000范围内不存在与题目要求相符的含有“007”的数,所以三次询问的答案都是0
示例2

输入

3
10000 10086
2333 23333
6666 66666

输出

132

牛客OI周赛2-提高组-LMLPHP

#include<bits/stdc++.h>

#define N 500000

using namespace std;
int n,m,l,r,ans;
int sum[N]; int main()
{
int T;cin>>T;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=;
sum[]=; for(int i=;i<=;i++) sum[i]+=sum[i-];
while(T--)
{
cin>>l>>r;
if(l<= && r<=) ans^=;
else if(l<= && r<=)
ans^=sum[r]-sum[l-];
}
printf("%d\n",ans);
return ;
}

40打了个表...

/*
因为"好朋友"的定义为含有"007",所以有很多情况都会被视为含有"007",例如
"10707","17007"等,此时我们发现对于含有"007"的情况的讨论比较复杂,所以我们不
妨讨论不含"007"的情况,也即对于任意的含有 7 的数,其中每一个7前都至多有2个0 ,
由此可以设f[i][j]表示在前 i 位有 j 个 0 的数的个数,在数位DP过程中存当前位置和已有
的 0 的个数,显然在 0 的个数>=2时,后面的数位上都不可能再有7.在求出不含"007"的
数之后,用总数减掉即可。
*/
#include<bits/stdc++.h> #define ll long long using namespace std; ll l,r,ans,f[][],d[];
int t,m,i,j,k,x,a[]; ll work(ll n)
{
if(n<)return ;
for(m=;n;n/=)a[m++]=n%;
reverse(a,a+m);
memset(f,,sizeof(f));
f[][]=a[]-;
x=;
for(i=;i<m;i++)
{
f[i+][]=f[i][]*;
f[i+][]=f[i][]+f[i][]*;
f[i+][]=f[i][]+f[i][]*;
f[i+][]=f[i][]+f[i][]*;
f[i+][x]+=a[i]-;
f[i+][x+(x<&&a[i]||x==&&a[i]>)]++;
if(x<&&!a[i]||x==&&a[i]==)x++;
}
return d[m-]+f[m][];
} int main()
{
for(i=,l=;i<=;i++,l*=)d[i]=work(l-);
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&l,&r);
ans^=work(r+)-work(l);
}
cout<<ans<<endl;
return ;
}
05-06 19:16