C. Unfair Poll-数数你会不会?
2017-02-01 01:46
344 查看
Codeforces Round #392 (Div. 2)
C. Unfair Poll
就是数数,先找周期,一个周期是这样的
1 2 3 …………………………………………..m
m+1, m+2, m+3 ………………………. 2m
2m+1, 2m+2, 2m+3……………………3m
………………………………………………………..
(n-2)m+1, (n-2)m+2…………………..(n-1)m
(n-1)m+1, (n-1)m+2,…………………..nm
((n-2)m+1, (n-2)m+2…………………..(n-1)m
………………………………………………………..
m+1, m+2, m+3 ………………………. 2m
然后再重复这样的周期,观察可以发现第一行和第n行的数一个周期只加1次,其余各行各数加2次,一个周期元素个数为T = n*m + (n-2)*m;(n!=1)或 T = 1(n=1)
先用k求出有多少个周期,最后剩下那部分直接模拟就可以了
C. Unfair Poll
就是数数,先找周期,一个周期是这样的
1 2 3 …………………………………………..m
m+1, m+2, m+3 ………………………. 2m
2m+1, 2m+2, 2m+3……………………3m
………………………………………………………..
(n-2)m+1, (n-2)m+2…………………..(n-1)m
(n-1)m+1, (n-1)m+2,…………………..nm
((n-2)m+1, (n-2)m+2…………………..(n-1)m
………………………………………………………..
m+1, m+2, m+3 ………………………. 2m
然后再重复这样的周期,观察可以发现第一行和第n行的数一个周期只加1次,其余各行各数加2次,一个周期元素个数为T = n*m + (n-2)*m;(n!=1)或 T = 1(n=1)
先用k求出有多少个周期,最后剩下那部分直接模拟就可以了
#include <iostream> #include <cstdio> #include <cstring> typedef long long int ll; const int maxn = 105; ll a[maxn * maxn]; int main() { // freopen("in.txt","r",stdin); memset(a,0,sizeof(a)); ll n,m,k,x,y,T; scanf("%lld %lld %lld %lld %lld",&n,&m,&k,&x,&y); if(n==1)T = m; else T = n*m + (n-2)*m; ll tot = n*m; ll maxv = 0,minv = k; ll aver = k/T; // printf("%lld\n",aver); if(k >= T){ for(ll i = 1;i<= m; ++i) a[i] = aver; for(ll i = m+1;i<= (n-1)*m; ++i) a[i] = 2*aver; for(ll i = (n-1)*m+1;i<= tot; ++i) a[i] = aver; k = k - k/T*T; } // printf("%lld\n",k); if(k<=tot){ for(ll i=1;i <= k;++i)++a[i]; } else{ for(ll i=1;i <= tot ;++i)++a[i]; k = k - tot; ll pos = (n-2)*m+1,cnt=0; while(k--){ ++a[pos]; // printf("pos = %lld\n",pos); ++pos; ++cnt; if(cnt%m==0)pos=(n-2 - cnt/m)*m+1; } } for(ll i=1;i<=tot;++i){ if(maxv < a[i])maxv = a[i]; if(minv > a[i])minv = a[i]; } /* for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ printf("%lld: %lld ",(i-1)*m+j,a[(i-1)*m+j]); } printf("\n"); } */ printf("%lld %lld %lld\n",maxv,minv,a[(x-1)*m+y]); return 0; }
相关文章推荐
- C. Unfair Poll 数学题,
- Unfair Poll codeforce758 C
- Codeforces Round #392 (Div. 2) C - Unfair Poll codeforces
- CodeForces 758C Unfair Poll(模拟)
- Codeforces Round #392 (Div. 2)-C. Unfair Poll(xjb)
- Codeforces Round #392(Div. 2) C Unfair Poll【思维+暴力】
- Unfair Poll CodeForces - 758C
- Codeforces 758C Unfair Poll 【数学】【思维】
- Unfair Poll (模拟)
- CF758 C. Unfair Poll (模拟)
- Codeforces Round #392 (Div. 2)C. Unfair Poll(找循环节)
- C. Unfair Poll
- 【Codeforces 758 C Unfair Poll】+ 细节
- Codeforces 758C Unfair Poll 数学推导,公式
- Codeforces Round #392 (Div. 2) C && 758C Unfair Poll(模拟)
- Codeforces Round #392 (Div. 2)Unfair Poll
- 【CodeForces - 758C Unfair Poll】 暴力 + 模拟
- CF758 C. Unfair Poll (模拟)
- SOCKET中用select还是用poll?
- linux下select 和 poll的用法