Codeforces 758C Unfair Poll(有循环节的处理方法,找到循环节处理成pair)

Codeforces 758C Unfair Poll

 部分转自https://www.cnblogs.com/TreeDream/p/6322699.html

题目链接:http://codeforces.com/contest/758/problem/C

题意:不公平的点名,给定一个教室,然后老师按照一定规则点名,行数从1点到n,再回到 1,列数一直从1到m 。求点名最多的学生的次数,和最少的,和一定位置的点名次数。

分析:

不太擅长计数,直接模拟一个二维矩阵好了,由于从前往后和从后往前是不一样的,直接建一个数组记录从前往后+从后往前,其中数据类型为pair<int ,int> 型。

#include<stdio.h>
#include<iostream>
#include<vector>
#define ll long long
using namespace std;
vector<pair<int,int> >v;
int main ()
{
    int n,m,x,y;
    ll k;
    while(~scanf("%d%d%lld%d%d",&n,&m,&k,&x,&y))
    {v.clear();
    ll a[102][103]={0};
        long long maxnum=-1;
        long long minnum=1000000000000000000;
      for(int i=1;i<=n;i++)
      {
          for(int j=1;j<=m;j++){
            v.push_back(make_pair(i,j));

          }
      }
      for(int i=n-1;i>1;i--){
        for(int j=1;j<=m;j++){
            v.push_back(make_pair(i,j));
        }
      }
      int siz=v.size();
     ll jie=k/(ll)siz;
      for(int i=0;i<siz;i++){
        a[v[i].first][v[i].second]+=jie;
      }
      ll yu=k%((ll)siz);
      for(ll i=0;i<yu;i++){
        a[v[i].first][v[i].second]++;
      }

      for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
        {
            maxnum=max(maxnum,a[i][j]);
            minnum=min(minnum,a[i][j]);
        }
      }
      printf("%lld %lld %lld\n",maxnum,minnum,a[x][y]);
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值