#include <iostream>
#include <cstdio>
#include <fstream>
#include <bitset>
using namespace std;
bitset<400040001>mp;//存棋盘
int n,m;
bool judge(int x,int y)
{
int cnt=0;//棋子计数器
//跑y轴
for (register int i=y;i>0;i--)
{
if (mp[(x-1)*n+i]==1)cnt++;
else break;
}
for (register int i=y+1;i<=n;i++)
{
if (mp[(x-1)*n+i]==1)cnt++;
else break;
}
if (cnt>=5)return true;
//跑x轴
cnt=0;
for (register int i=x;i>0;i--)
{
if (mp[(i-1)*n+y]==1)cnt++;
else break;
}
for (register int i=x+1;i<=n;i++)
{
if (mp[(i-1)*n+y]==1)cnt++;
else break;
}
if (cnt>=5)return true;
//跑斜线
cnt=0;
for (register int i=x,j=y;i>0&&j>0;i--,j--)
{
if (mp[(i-1)*n+j]==1)cnt++;
else break;
}
for (register int i=x+1,j=x+1;i<=n&&j<=n;i++,j++)
{
if (mp[(i-1)*n+j]==1)cnt++;
else break;
}
if (cnt>=5)return true;
//另外一条
cnt=0;
for (register int i=x,j=y;i>0&&j<=n;i--,j++)
{
if (mp[(i-1)*n+j]==1)cnt++;
else break;
}
for (register int i=x+1,j=y-1;i<=n&&j>0;i++,j--)
{
if (mp[(i-1)*n+j]==1)cnt++;
else break;
}
if (cnt>=5)return true;
return false;
}
int main()
{
ifstream fin("A.in");
ofstream fout("A.out");
fin>>n>>m;
//cin>>n>>m;
int x,y;
for (register int i=1;i<=m;i++)
{
fin>>x>>y;
//cin>>x>>y;
mp[(x-1)*n+y]=1;
if (judge(x,y))
{
fout<<i;//若ok,就输出然后就停了
//cout<<i;
return 0;
}
}
fout<<"-1";//都不ok就输出-1
//cout<<"-1";
return 0;
}
另外,因为内存限制原因,我们不要开map,也不要开bool,bitset水过去就好了。
(STL真香)
T2
小J爱gcd
最大公约数,greatest common divisor,简称gcd。
对于非负整数x与y的最大公约数,为最大的正整数z,使得x与y均是z的整数倍。特定地,gcd(0,0)=0,gcd(0,x)=x.
小J非常清楚一点:gcd是数学王国的统治者,一切函数都要臣服于gcd之下,哪怕是增长速度极快的指数函数也不例外。
小J非常想知道当统治者gcd与速度之王结合在一起会是怎么样的效果,于是小J想出了这么一个题目:求解gcd(a^b,c^d).
小J于是将问题交给了你。为了运算方便,将最后的结果对1e9+7取模后输出。
输入格式:
一行四个非负整数a,b,c,d。意义见体面。
输出格式:
一行一个整数,为所求的答案。
输入样例:
2 3 4 1
输出样例:
4
样例解释:
数据规模:
对于30%的数据,a,b,c,d<=10.
对于60%的数据,a,b,c,d<=10000.
对于100%的数据,a,b,c,d<=10^9.
行吧,这个题我用的是快速幂+GCD然后%%%
快速幂不多说,关键是gcd的时候要返回什么值,
外加一堆特判,水过去算了。(应该不是满分解)
上代码:
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
typedef long long int lli;
inline lli quick_pow(lli a, lli b, lli c)
{
if (a==0)return 0;
if (a==1)return 1;
if (b==0)return 0;
lli res = 1;
a %= c;
while (b)
{
if (b & 1)
res = (res * a) % c;
a = (a * a) % c;
b >>= 1;
}
return res;
}
inline lli gcd(lli a,lli b)
{
if (a==0&&b==0)return 0;
else if (a!=0&&b==0)return b;
else if (a==0&&b!=0)return a;
else
{
while (a%b!=0)
{
lli temp=a;
a=b;
b=temp%b;
}
return b;
}
}
lli min(lli a,lli b)
{
return a<=b?a:b;
}
int main()
{
ofstream fout("B.out");
ifstream fin("B.in");
lli a,b,c,d,degcd,ans;
/*fin*/fin>>a>>b>>c>>d;
//degcd=gcd(a,c);
//ans=quick_pow(degcd,min(b,d),1e9+7);
ans=gcd(quick_pow(a,b,1e9+7),quick_pow(c,d,1e9+7));
/*fout*/fout<<ans;
return 0;
}
T3不会,看上面的博客吧。
End.