首页 > 其他分享 >Codeforces Round #662 (Div. 2)

Codeforces Round #662 (Div. 2)

时间:2023-02-03 11:37:59浏览次数:45  
标签:cnt int mid rep 662 Codeforces Div else sd


A. Rainbow Dash, Fluttershy and Chess Coloring

题意:

Codeforces Round #662 (Div. 2)_最小值

手动写几个找找规律。

AC代码:

int n, m;

int main()
{
int T;
sd(T);
while (T--)
{
sd(n);
pd(n / 2 + 1);
}
return 0;
}

B. Applejack and Storages

题意:

Codeforces Round #662 (Div. 2)_ci_02 块木板,再 Codeforces Round #662 (Div. 2)_数组_03

统计每个长度出现的次数,判断相同长度的个数是否为 Codeforces Round #662 (Div. 2)_ci_04 的倍数或者 Codeforces Round #662 (Div. 2)_最小值_05

AC代码:

const int N = 1e5 + 50;

int x, cnt[N];
int main()
{
int n, q;
sd(n);
rep(i, 1, n)
{
sd(x);
cnt[x]++;
}
int cnt2 = 0, cnt4 = 0;
rep(i, 1, 100000)
{
cnt2 += cnt[i] / 2;
cnt4 += cnt[i] / 4;
}
sd(q);
while (q--)
{
char op[5];
ss(op + 1);
sd(x);
cnt2 -= cnt[x] / 2;
cnt4 -= cnt[x] / 4;
if (op[1] == '+')
cnt[x]++;
else
a[x]--;
cnt2 += a[x] / 2;
cnt4 += a[x] / 4;
if (cnt4 > 0 && cnt2 >= 4)
puts("YES");
else
puts("NO");
}
return 0;
}

C. Pinkie Pie Eats Patty-cakes

题意:

给你一个数组,问你怎样摆放该数组中的数可以使得数组中相同数之间的距离的最小值最大。

找到出现次数最多的那个数的次数,如果总数是奇数并且出现次数最多的比总数一半还多或者总数是偶数出现次数最多的比一半多那么就是 Codeforces Round #662 (Div. 2)_最小值_06

接下来就是二分,二分每一组的数量,最后答案 Codeforces Round #662 (Div. 2)_ci_07

AC代码:

const int N = 1e5 + 10;
int n, q;
int a[N], cnt[N];

bool judge(int mid)
{

int res = n / mid;
int tmp = res;
int sum = mid * res;
if (n % mid)
tmp++;
rep(i, 1, n)
{
if (cnt[i] > tmp)
return false;
sum -= min(res, cnt[i]);
}
return sum <= 0;
}

int main()
{
int T;
sd(T);
while (T--)
{
sd(n);
rep(i, 1, n)
cnt[i] = 0;
int maxn = 0;
rep(i, 1, n)
{
sd(a[i]);
cnt[a[i]]++;
maxn = max(maxn, cnt[a[i]]);
}
if ((n & 1) && maxn > (n / 2 + 1))
{
puts("0");
continue;
}
if ((n % 2 == 0) && maxn > n / 2)
{
puts("0");
continue;
}
int l = 1, r = n;
int ans = 0;
while (l <= r)
{
int mid = (l + r) >> 1;
if (judge(mid))
{
ans = mid;
l = mid + 1;
}
else
r = mid - 1;
}
ans--;
pd(ans);
}
return 0;
}

D. Rarity and New Dress

题意:

给你一个 Codeforces Round #662 (Div. 2)_最小值_08

每个菱形显然可以分为上三角和下三角拼成的

那么以这个格子为中心的最大菱形就是 Codeforces Round #662 (Div. 2)_最小值_09 接下来就是 Codeforces Round #662 (Div. 2)_ci_10

我们令 Codeforces Round #662 (Div. 2)_数组_11 表示 Codeforces Round #662 (Div. 2)_数组_12 向左延伸的最大同色格子 Codeforces Round #662 (Div. 2)_ci_13 表示 Codeforces Round #662 (Div. 2)_数组_12 向右延伸的最大同色格子, Codeforces Round #662 (Div. 2)_ci_15 ,表示 Codeforces Round #662 (Div. 2)_数组_12

那么最大上三角的转移方程是,当上面的格子和自己同色时 Codeforces Round #662 (Div. 2)_数组_17

Codeforces Round #662 (Div. 2)_数组_18 表示接着上面的尺寸,自己这行再加大一个尺寸,但是不能超过 Codeforces Round #662 (Div. 2)_数组_19

当上面的格子和自己不同色时,Codeforces Round #662 (Div. 2)_数组_20

AC代码:

const int N = 2010;
char s[N][N];
int l[N][N], r[N][N], mid[N][N];
int n, m, up[N][N], down[N][N];
int main()
{
int n, m;
sdd(n, m);
rep(i, 1, n)
{
rep(j, 1, m)
{
cin >> s[i][j];
}
}
rep(i, 1, n)
{
rep(j, 1, m)
{
if (s[i][j] == s[i][j - 1])
l[i][j] = l[i][j - 1] + 1;
else
l[i][j] = 1;
}
per(j, m, 1)
{
if (s[i][j] == s[i][j + 1])
r[i][j] = r[i][j + 1] + 1;
else
r[i][j] = 1;
mid[i][j] = min(l[i][j], r[i][j]); //横向的长
}
}
rep(i, 1, m)
{
rep(j, 1, n)
{
if (s[j][i] == s[j - 1][i])
up[j][i] = min(mid[j][i], up[j - 1][i] + 1);
else
up[j][i] = 1;
}
per(j, n, 1)
{
if (s[j][i] == s[j + 1][i])
down[j][i] = min(mid[j][i], down[j + 1][i] + 1);
else
down[j][i] = 1;
}
}
int ans = 0;
rep(i, 1, n)
{
rep(j, 1, m)
{
ans += min(up[i][j], down[i][j]);
}
}
pd(ans);
}


标签:cnt,int,mid,rep,662,Codeforces,Div,else,sd
From: https://blog.51cto.com/u_15952369/6035714

相关文章

  • Codeforces Round #658 (Div. 2)
    ACommonSubsequence只要找到有一个相同的元素输出即可。AC代码:constintN=1010;inta[N],b[N];intans;intcnt[N];intmain(){intt;sd(t);while(t--){......
  • Codeforces Round #657 (Div. 2)
    A.AcaciusandString题意:给你一个串,你可以把换成任意字符,使得这个串最后只出现一次暴力枚举AC代码:strings;intn;stringT="abacaba";boolcheck(string&a){int......
  • Codeforces Round #656 (Div. 3)
    A.ThreePairwiseMaximums题意:给你三个正整数和,请你找到正整数和,使得,或者确定不可能找到这样的和AC代码:intmain(){intt;sd(t);while(t--){int......
  • Codeforces Round #655 (Div. 2)
    AOmkarandCompletion只要找两个相加不等的数交叉构造即可。AC代码:intmain(){intt;sd(t);while(t--){sd(n);rep(i,1,n){if(i&1)......
  • Codeforces 1360 D. Buying Shovels
    题意:要买个铲子,商店中有中不同的卖法,依次每一次卖到个铲子,现在只能选择其中的一种买法,问最少买几次同一种的买法,使得刚好买到直接选择小于的AC代码:intn,m,k;......
  • Codeforces 1360 E. Polygon
    题意:在一个的网格上方和左边都有一排大炮,每次可以发射一个,遇到边界和都会停下来,有没有一种发射频率可以组成给出的大炮的位置在左和上,所以每个非右边界或者下边界的......
  • Codeforces 1358 C. Celex Update
    题意:一个矩形内有多个方格,每个方格都按照顺序填写了一些数。给两个坐标,求这两个坐标间路径经过的数字和不同的路线总数。可以看出比如要从走到,这两种走法和第二个比......
  • Codeforces 1354 D. Multiset(树状数组)
    题意;要你实现一个求第k大数的数据结构。树状数组模板题。AC代码:constintN=1e6+50;inta[N];intn,q;voidadd(intp,intval){while(p<=n){a[p]+=va......
  • codeforces 580C Kefa and Park (树上DFS)
    Description:Kefadecidedtocelebratehisfirstbigsalarybygoingtotherestaurant.Helivesbyanunusualpark.Theparkisarootedtreeconsistingof n ve......
  • CodeForces - 253E Table with Letters - 2
    Description:Let'sconsideranetworkprinterthatfunctionslikethat.Itstartsworkingattime0.Ineachseconditcanprintonepageofatext.Atsomemomen......