网站建设html代码,wordpress模板不好用,网页设计尺寸用怎么量,成都建设网站的B题 题意#xff1a;定义一个牛逼的数是这个数十进制中至少包含一个数d。 现在给定d和若干询问#xff0c;每个询问一个x#xff0c;问x能否分解成若干d构成的牛逼的数之和。 看起来挺难搞的#xff0c;不能快速的判断是否是牛逼的数而且也不能很好的挑选合适的数组成x。那…B题 题意定义一个牛逼的数是这个数十进制中至少包含一个数d。 现在给定d和若干询问每个询问一个x问x能否分解成若干d构成的牛逼的数之和。 看起来挺难搞的不能快速的判断是否是牛逼的数而且也不能很好的挑选合适的数组成x。那么我们不妨就把这个数拆成 a%d a/d*d 这样只需要判断a%d变成牛逼数加的d的最少数量让后跟a/d比较一下大小就可以了。这个东西是可以预处理出来的具体可以看代码。
//#pragma GCC optimize(2)
#includecstdio
#includeiostream
#includestring
#includecstring
#includemap
#includecmath
#includecctype
#includevector
#includeset
#includequeue
#includealgorithm
#includesstream
#includectime
#includecstdlib
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].ltr[u].r1)
#define Len(u) (tr[u].r-tr[u].l1)
#define random(a,b) ((a)rand()%((b)-(a)1))
#define db puts(---)
using namespace std;//void rd_cre() { freopen(d://dp//data.txt,w,stdout); srand(time(NULL)); }
//void rd_ac() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//AC.txt,w,stdout); }
//void rd_wa() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//WA.txt,w,stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pairint,int PII;const int N1000010,mod1e97,INF0x3f3f3f3f;
const double eps1e-6;int n;
int f[20][20];bool check(int x,int d)
{while(x){if(x%10d) return true;x/10;}return false;
}void init()
{for(int i1;i9;i){for(int j1;j9;j){int sumi,cnt0;while(!check(sum,j)) sumj,cnt;f[i][j]cnt;}}
}int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);init();int _; cin_;while(_--){int q,d; scanf(%d%d,q,d);while(q--){int x; scanf(%d,x);int ax%d,bx/d;if(f[a][d]b) puts(YES);else puts(NO);}}return 0;
}
/**/
C题 题意 数组a是一个特定的数组对于每个数 a 都有一个相反数 - a 。让后定义 d 为上面的式子我们发现对于每个数他的相反数和这个数的 d 是相同的所以我们只需要先排序检查一下是否符合让后处理正数即可。化简式子可得 让后 an 可以直接算出来依次递推 a ( n - 1 ) 让后检查是否符合即可。
//#pragma GCC optimize(2)
#includecstdio
#includeiostream
#includestring
#includecstring
#includemap
#includecmath
#includecctype
#includevector
#includeset
#includequeue
#includealgorithm
#includesstream
#includectime
#includecstdlib
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].ltr[u].r1)
#define Len(u) (tr[u].r-tr[u].l1)
#define random(a,b) ((a)rand()%((b)-(a)1))
#define db puts(---)
using namespace std;//void rd_cre() { freopen(d://dp//data.txt,w,stdout); srand(time(NULL)); }
//void rd_ac() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//AC.txt,w,stdout); }
//void rd_wa() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//WA.txt,w,stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pairint,int PII;const int N1000010,mod1e97,INF0x3f3f3f3f;
const double eps1e-6;int n;
LL a[N],d[N];bool check()
{for(int i1;in*2;i2) if(d[i]!d[i1]) return false;if(d[n*2]%(n*2)!0) return false;a[n]d[n*2]/(n*2);for(int in-1;i1;i--){LL xd[i*21],yd[i*2];if((x-y)%(2*i)!0) return false;a[i]a[i1]-(x-y)/(2*i);if(a[i]a[i1]||a[i]0) return false;}return true;
}int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);int _; scanf(%d,_);while(_--){scanf(%d,n);for(int i1;in*2;i) scanf(%lld,d[i]);sort(d1,d1n*2);if(!check()) puts(NO);else puts(YES);}return 0;
}
/**/
D.
题意 给定一个数组可以做无数次操作每次操作任选两个数 x 和 y让后在后面添加 2 * x - y。问能否得到k。 我们把 2 * x - y 拆成 x ( x - y ) 这样就相当于在一个数后面加上这个数与任意数的差。既然这样我们可以思考能否通过一个选定的数让后加上这个数与其他数的差来得到 k 呢所以我们多写几组就可以发现每个数都可以写成 ah∑i,j(ai−aj)a_h \sum_{i,j} (a_i-a_j) ahi,j∑(ai−aj) 其中 i j 是任选的两个数。那么我们的 k 也是可以写成这种形式的换句话说就是ah∑i,j(ai−aj)ka_h \sum_{i,j} (a_i-a_j) kahi,j∑(ai−aj)k 我们需要移一下项∑i,j(ai−aj)k−ah\sum_{i,j} (a_i-a_j) k - a_hi,j∑(ai−aj)k−ah 现在我们考虑如何确定 h i j 呢我们可以发现对于每一个数我们都可以通过两次操作变成另一个。比如我们现在有 ana_nan让后我们需要得到a1a_1a1。我们只需要先得到an(an−a1)a_n(a_n-a_1)an(an−a1)让后an(an−(an(an−a1)))a_n(a_n-(a_n(a_n-a_1)))an(an−(an(an−a1)))即可得到a1a_1a1。所以我们可以把 aja_jaj 和 aha_hah 统一成 a1a_1a1 让后就得到如下式子∑i,1(ai−a1)k−a1\sum_{i,1} (a_i-a_1) k - a_1i,1∑(ai−a1)k−a1让后显然有解的条件是(k−a1)modgcd(ai,a1)0(k-a_1) \bmod \gcd(a_i,a_1) 0(k−a1)modgcd(ai,a1)0让后一层循环跑一遍就可以啦。
//#pragma GCC optimize(2)
#includecstdio
#includeiostream
#includestring
#includecstring
#includemap
#includecmath
#includecctype
#includevector
#includeset
#includequeue
#includealgorithm
#includesstream
#includectime
#includecstdlib
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].ltr[u].r1)
#define Len(u) (tr[u].r-tr[u].l1)
#define random(a,b) ((a)rand()%((b)-(a)1))
#define db puts(---)
using namespace std;//void rd_cre() { freopen(d://dp//data.txt,w,stdout); srand(time(NULL)); }
//void rd_ac() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//AC.txt,w,stdout); }
//void rd_wa() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//WA.txt,w,stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pairint,int PII;const int N1000010,mod1e97,INF0x3f3f3f3f;
const double eps1e-6;int n;
int a[N];int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);int _; scanf(%d,_);while(_--){LL k; scanf(%d%lld,n,k);LL gd0,first-1000000000000000001;for(int i1;in;i){LL x; scanf(%lld,x);if(first-1000000000000000001) firstx;else gd__gcd(gd,x-first);}if((k-first)%gd0) puts(YES);else puts(NO);}return 0;
}
/**/
E. 题意给定两个串 a b让后有q个操作每个操作对应一个区间让后你首先需要检查这个区间是否全为0或1如果不是就退出。否则你可以选择修改严格小于 长度 / 2 个数。问最终能否使 a 变成 b 。 正着来很难想因为每次都需要先看是否全为0或者1让后修改而且修改还需要顾及下面的操作能否满足全为0或1所以我们考虑全部反着来。反着来也就是由b到a每次先修改严格小于 长度 / 2 个数让后使其全为0或1。这样就很简单了每次只需要修改数量少的哪个就可以了需要特判一下两者相等的情况这样的话不能修改直接输出No即可。最后检查一下是否变成了a就行啦。 对于两个操作直接用线段树维护就好啦线段树的基本操作了。
//#pragma GCC optimize(2)
#includecstdio
#includeiostream
#includestring
#includecstring
#includemap
#includecmath
#includecctype
#includevector
#includeset
#includequeue
#includealgorithm
#includesstream
#includectime
#includecstdlib
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].ltr[u].r1)
#define Len(u) (tr[u].r-tr[u].l1)
#define random(a,b) ((a)rand()%((b)-(a)1))
#define db puts(---)
using namespace std;//void rd_cre() { freopen(d://dp//data.txt,w,stdout); srand(time(NULL)); }
//void rd_ac() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//AC.txt,w,stdout); }
//void rd_wa() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//WA.txt,w,stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pairint,int PII;const int N200010,mod1e97,INF0x3f3f3f3f;
const double eps1e-6;int n,m;
char st[N],ed[N];
PII q[N];
struct Node
{int l,r;int sum,lazy;
}tr[N2];void pushup(int u)
{tr[u].sumtr[L].sumtr[R].sum;
}void pushdown(int u)
{if(tr[u].lazy-1) return;tr[L].lazytr[u].lazy;tr[R].lazytr[u].lazy;tr[L].sumLen(L)*tr[u].lazy;tr[R].sumLen(R)*tr[u].lazy;tr[u].lazy-1;
}void build(int u,int l,int r)
{tr[u]{l,r,0,-1};if(lr) { tr[u].sumed[l]-0; return; }build(L,l,Mid); build(R,Mid1,r);pushup(u);
}void modify(int u,int l,int r,int c)
{if(tr[u].lltr[u].rr){tr[u].sumLen(u)*c;tr[u].lazyc;return;}pushdown(u);if(lMid) modify(L,l,r,c);if(rMid) modify(R,l,r,c);pushup(u);
}int query(int u,int l,int r)
{if(tr[u].lltr[u].rr) return tr[u].sum;pushdown(u);int ans0;if(lMid) ansquery(L,l,r);if(rMid) ansquery(R,l,r);return ans;
}bool check()
{for(int im;i1;i--){int lq[i].X,rq[i].Y;int sumquery(1,l,r),lenr-l1;if(len%20sum*2len) return false;if(len-sumsum) modify(1,l,r,0);else modify(1,l,r,1);}for(int i1;in;i) if(query(1,i,i)!st[i]-0) return false;return true;
}int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);int _; scanf(%d,_);while(_--){scanf(%d%d,n,m);scanf(%s%s,st1,ed1);build(1,1,n);for(int i1;im;i) scanf(%d%d,q[i].X,q[i].Y);if(check()) puts(YES);else puts(NO);}return 0;
}
/**/
F. 题意给n个点让你求这n个点一个排列使得相邻的三个之间构成的角为锐角。 我们可以发现当是钝角的时候钝角对的边一定是最大的。那么我们可以考虑一个贪心策略我们每次都找距离当前点最远的点让后把他们俩连起来的边当坐角边而非对角边。 下面证明一下 假设当前有三个点 A B C 目前知道距离A最远的点为B距离B最远的点为C可以得知ACAB所以ABC构成的三角形中最长边为角边所以∠ABC一定不是钝角。 让后直接瞎搞搞就可以啦。 为了避免精度问题所以距离最好不开方。
//#pragma GCC optimize(2)
#includecstdio
#includeiostream
#includestring
#includecstring
#includemap
#includecmath
#includecctype
#includevector
#includeset
#includequeue
#includealgorithm
#includesstream
#includectime
#includecstdlib
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].ltr[u].r1)
#define Len(u) (tr[u].r-tr[u].l1)
#define random(a,b) ((a)rand()%((b)-(a)1))
#define db puts(---)
using namespace std;//void rd_cre() { freopen(d://dp//data.txt,w,stdout); srand(time(NULL)); }
//void rd_ac() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//AC.txt,w,stdout); }
//void rd_wa() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//WA.txt,w,stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pairLL,LL PII;const int N1000010,mod1e97,INF0x3f3f3f3f;
const double eps1e-6;int n;
int ans[N],st[N];
PII p[N];LL get(int i,int j)
{LL dxp[i].X-p[j].X;LL dyp[i].Y-p[j].Y;return dx*dxdy*dy;
}int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);scanf(%d,n);for(int i1;in;i) scanf(%lld%lld,p[i].X,p[i].Y);ans[1]1,st[1]1;for(int i1;in-1;i){LL mx0,id-1;for(int j1;jn;j) if(!st[j]get(ans[i],j)mx) mxget(ans[i],j),idj;ans[i1]id; st[id]1;}for(int i1;in;i) printf(%d ,ans[i]);puts();return 0;
}
/**/