被7整除
有更好的方法,但是总体上差不多
#include<bits/stdc++.h>
using namespace std;
#define PB push_back
#define MP make_pair
#define SZ(v) ((int)(v).size())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define FORE(i,a,b) for(int i=(a);i<=(b);++i)
#define REPE(i,n) FORE(i,0,n)
#define FORSZ(i,a,v) FOR(i,a,SZ(v))
#define REPSZ(i,v) REP(i,SZ(v))
typedef long long ll;
typedef unsigned long long ull;
#define db double
ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); }
const int MAXN=100008;
int a[MAXN];
int sum[7];
int getlen(int x)
{
if(x==0) return 1;
int ans=0;
while(x>0)
{
x/=10;
ans++;
}
return ans;
}
ll fuck(int x,int y)
{
ll ans=x;
while(y--)
{
ans*=10;
}
return ans;
}
int main()
{
int n;
while(scanf("%d",&n)==1)
{
ll ans=0;
REP(i,n) scanf("%d",&a[i]);
REP(i,7) sum[i]=0;
REP(i,n) sum[a[i]%7]++;
REP(i,n)
{
sum[a[i]%7]--;
REP(j,7)
{
int temp=getlen(a[i]);
ll shit= fuck(j,temp)+a[i];
if(shit%7==0)
ans+=sum[j];
}
sum[a[i]%7]++;
}
cout<<ans<<endl;
}
return 0;
}
关灯游戏
如果一个先手状态能推导出任意一个先手必败状态,则该状态为先手必胜状态
如果一个先手状态不能推到任意一个先手必败状态,则该状态为先手必败状态
0是先手必败,1是先手必胜
然后在前面加数字就可以推了
答案十分坑爹
#include<bits/stdc++.h>
using namespace std;
#define PB push_back
#define MP make_pair
#define SZ(v) ((int)(v).size())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define FORE(i,a,b) for(int i=(a);i<=(b);++i)
#define REPE(i,n) FORE(i,0,n)
#define FORSZ(i,a,v) FOR(i,a,SZ(v))
#define REPSZ(i,v) REP(i,SZ(v))
typedef long long ll;
typedef unsigned long long ull;
#define db double
#define pi
ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); }
const int MAXN=100008;
int a[MAXN];
int main()
{
int n;
while(scanf("%d",&n)==1)
{
REP(i,n) scanf("%d",&a[i]);
if(a[n-1]==0) printf("Bob\n");
else printf("Alice\n");
}
return 0;
}