【loli的胡策】NOIP训练8.15(找规律+暴力)
2017-08-15 16:50
405 查看
1.
题解:
愚蠢的自己拒绝暴力乱搞了一下就GG了。。。
科学的50pts:f
表示n个人时最后剩下的编号,发现每增加m-1个人,答案就向后移动m个,f
=f[n-m+1]%(n-m+1)+m,初始值f[1]=1
玄学的100pts:容(da)易(biao)发现,只有f[m^a+m-1]=m,其余的f
=f[n-m+1]+m,
那么我们令n=m^a+(m-1)*k
f
=f[m^a+k(m-1)]=f[m^a+k(m-1)-m+1]+m=f[m^a+(k-1)(m-1)]+m=f[m^a+(k-2)(m-1)]+2m=f[m^a+m-1]+(k-1)m=km.
代码:
2.
题解:
30pts暴力,一定要记得检查数组大小啊。
100pts事实证明暴力只要够优就是能过的。
题解:
愚蠢的自己拒绝暴力乱搞了一下就GG了。。。
科学的50pts:f
表示n个人时最后剩下的编号,发现每增加m-1个人,答案就向后移动m个,f
=f[n-m+1]%(n-m+1)+m,初始值f[1]=1
玄学的100pts:容(da)易(biao)发现,只有f[m^a+m-1]=m,其余的f
=f[n-m+1]+m,
那么我们令n=m^a+(m-1)*k
f
=f[m^a+k(m-1)]=f[m^a+k(m-1)-m+1]+m=f[m^a+(k-1)(m-1)]+m=f[m^a+(k-2)(m-1)]+2m=f[m^a+m-1]+(k-1)m=km.
代码:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define LL long long using namespace std; LL n,m; int main() { scanf("%I64d%I64d",&n,&m); LL x=1; for (int i=1;x<n/m;i++) x*=m; printf("%I64d\n",(n-x)/(m-1)*m); }
2.
题解:
30pts暴力,一定要记得检查数组大小啊。
100pts事实证明暴力只要够优就是能过的。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[30],b[30]; bool aa[30],bb[30]; int n,m,cnt,dx,dy; int head[50]; int x[100005],y[100005]; bool key; int re[30][30]; int inline read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } void Print_res() { for (int i=0;i<m;i++) printf("%d ",a[i]); printf("\n"); for (int i=0;i<m;i++) printf("%d ",b[i]); } void dfs(int t) { if (t==m) { Print_res(); key=1; return; } for (int k=0;k<m;k++) { if (aa[k]) continue; a[t]=k; bool ok=1; bool temp[30]={0}; for (int e=0;e<m;e++) { if (re[t][e]==-1) continue; int v=(a[t]+e)%m; int val=re[t][e]; if ((b[v]==-1&&bb[val]==0)||b[v]==val) ; else {ok=0;break;} } if (ok==0) continue; aa[k]=1; for (int e=0;e<m;e++) { if (re[t][e]==-1) continue; int v=(a[t]+e)%m; int val=re[t][e]; if (b[v]==-1) { b[v]=val;bb[val]=1; temp[v]=1; } } dfs(t+1); if (key) return; for (int i=0;i<m;i++) if (temp[i]) { bb[b[i]]=0;b[i]=-1; } aa[k]=0; } } int main() { freopen("password.in","r",stdin); freopen("password.out","w",stdout); n=read();m=read(); for (int i=1;i<=n;i++) x[i]=read(); for (int i=1;i<=n;i++) y[i]=read(); for (int i=0;i<m;i++) a[i]=b[i]=-1; memset(re,-1,sizeof(re)); while (cnt<n) { cnt++; re[(x[cnt]+dx)%m][dy]=y[cnt]; dx++; if (dx==m) dx=0,dy++; if (dy==m) dy=0; } dfs(0); }
相关文章推荐
- 【loli的胡策】NOIP训练8.10(数论+树形dp+贪心)
- 【loli的胡策】NOIP训练8.12(二分?+dp?)
- 【loli的胡策】NOIP训练10.2(快速幂+树形期望dp)
- 【loli的胡策】NOIP训练7.20(二分+主席树)
- 【loli的胡策】NOIP训练7.15(签到+dp+线段树)
- 【loli的胡策】训练1.7(hash+记忆化搜索+AC自动机+矩阵优化dp)
- 【loli的胡策】训练1.14(组合数学+概率期望+乱搞)
- NOIP模拟题 [暴力][贪心][栈][dfs][找规律]
- (老弱病残康复训练)51nod1995 三子棋(暴力,水题)
- Codeforces 57C Array dp暴力找到规律
- JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点
- POJ训练计划1035_Spell checker(串处理/暴力)
- 【学姐的胡策】训练8.17(Lucas+线段树并查集)
- 【学姐的胡策】训练8.18(KMP+dp)
- hdu 4902 Nice boat(2014多校训练第4场1006)(暴力写法)
- 纪中训练 day8 【NOIP普及组】模拟赛D组 解题报告
- [NOIP模拟][规律探究]弹球
- 【bzoj 十连测】[noip2016第二场]Problem A. Divisors(暴力)
- 【NOIP2016提高A组模拟8.15】Throw
- 2017.9.17 胡策题 【题解 + 总结】【NOIP模拟】