#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define mst(s,_s) memset(s, _s, sizeof(s))
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF = 0x3f3f3f3f;
const int N = 1e6+100;
int T,n,m;
int st[N];
int res=0;
int cnt[N];
int get_num(int i,int j){
int res=0;
for(int k=i;k<=j;k++)
{
res=res*10+cnt[k];
}
return res;
}
void dfs(int u)
{
if(u>9)
{
int a=0,b=0,c=0;
for(int i=1;i<=7;i++)
{
for(int j=i+1;j<=8;j++){
a=get_num(1,i);
b=get_num(i+1,j);
c=get_num(j+1,9);
if((n-a)*c==b)
{
res++;
//cout<
}
}
}
}
for(int i=1;i<=9;i++)
{
if(st[i]) continue;
st[i]=1;
cnt[u]=i;
dfs(u+1);
st[i]=0;
cnt[u]=0;
}
}
int main() {
cin>>n;
dfs(1);
cout<<res<<endl;
return 0;
}
#include
#include
#include
#include
using namespace std;
const int N = 10;
int n;
bool st[N], backup[N];
int ans;
bool check(int a, int c)
{
long long b = n * (long long)c - a * c;
if (!a || !b || !c) return false;
memcpy(backup, st, sizeof st);//递归memcpy,不能开太大
while (b)
{
int x = b % 10; // 取个位
b /= 10; // 个位删掉
if (!x || backup[x]) return false;
backup[x] = true;
}
for (int i = 1; i <= 9; i ++ )
if (!backup[i])
return false;
return true;
}
void dfs_c(int u, int a, int c)
{
if (u > 9) return;
if (check(a, c)) ans ++ ;
for (int i = 1; i <= 9; i ++ )
if (!st[i])
{
st[i] = true;
dfs_c(u + 1, a, c * 10 + i);
st[i] = false;
}
}
void dfs_a(int u, int a)
{
if (a >= n) return;
if (a) dfs_c(u, a, 0);
for (int i = 1; i <= 9; i ++ )
if (!st[i])
{
st[i] = true;
dfs_a(u + 1, a * 10 + i);
st[i] = false;
}
}
int main()
{
cin >> n;
dfs_a(0, 0);
cout << ans << endl;
return 0;
}
4*4的开关,直接二进制枚举方案,输出字典序,不需要特殊处理,
翻转十字的情况下,中间要翻转三下,在代码中
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define mst(s) memset(s, 0, sizeof(s))
const int INF = 0x3f3f3f3f;
#define LOCAL
char g[10][10],back_up[10][10];
typedef pair<int,int>pll;
vector<pll>res,min_res;
int get(int i,int j)
{
return i*4+j;
}
void turn_one(int x, int y)
{
if (g[x][y] == '+') g[x][y] = '-';
else g[x][y] = '+';
}
void turn(int x, int y)
{
for (int i = 0; i < 4; i ++ )
{
turn_one(x, i);
turn_one(i, y);
}
turn_one(x, y);
}
int main()
{
for(int i=0;i<4;i++)
cin>>g[i];
for(int i=0;i<1<<16;i++)
{
res.clear();
memcpy(back_up,g,sizeof back_up);
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
{
if(i>>get(j,k) &1){
res.push_back({j,k});
turn(j,k);
}
}
bool ok =false;
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
{
if(g[j][k]=='+')
ok=true;
}
if(!ok) {
if(min_res.empty() ||( min_res.size()>res.size()))
{
min_res=res;
}
}
memcpy(g,back_up,sizeof back_up);
}
cout<<min_res.size()<<endl;
for(auto x:min_res) cout<<x.first+1<<' '<<x.second+1<<endl;
return 0;
}
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define mst(s) memset(s, 0, sizeof(s))
const int INF = 0x3f3f3f3f;
#define LOCAL
const int N=1e6;
int n;
int a[N];
bool judge(int mid)
{
bool ok=true;
int nums=mid;
for(int i=1;i<=n;i++)
{
if(nums*2-a[i]>=1e5+100) return true; //中间的能量过大,肯定返回true,否则一直*2爆int
if(nums*2-a[i]<0) return false;
nums=nums*2-a[i];
}
return true;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int l=0,r=1e5+100;
while(l<r)
{
int mid=l+r>>1;
if(judge(mid)) r=mid;
else l=mid+1;
}
cout<<r<<endl;
return 0;
}