A. Polycarp and Sums of Subsequences

题目大意:

给七个不降序的数字,为三个数组合后得到的七种答案,求原来的三个数是哪些

思路:

由样例不难发现,第一个一定是三个数之一,因为没有数可以相加得到最小的第一个

然后发现,第二个也一定是三个数之一,因为不能两个第一个数相加,所以第二个也一定是数自身

最后一个数最大,一定是三个数之和,那么就遍历就可以了。

代码:

/*
************************************
***********emu^w^*********** */ #include <bits/stdc++.h>
using namespace std; const int N = 1510, M = 5e4 + 10; int main()
{
int T;
cin>>T;
while(T--)
{
int q[8];
for(int i = 1; i <= 7; i++) cin>>q[i]; cout<<q[1]<<" "<<q[2]<<" ";
for(int i = 3; i <= 6; i++)
{
if(q[i] + q[1] + q[2] != q[7]) continue; cout<<q[i]<<endl;
break;
}
}
}

B. Missing Bigram

题目大意:

把一个长度为n只有a和b组成的字符串转化为n-1个紧邻的二元字符串 例如

abbab -> ab bb ba ab

然后抹掉其中一个 然后让你根据剩下几个二元字符串求原字符串

思路:

不难发现 每个字符串之间头尾相连,如果在中间就发现没有头尾相连的,那就可以直接发现抹除的是哪个了

情况1:

抹除的那个在中间部分,有二元串头尾不相连,直接在这个串之前输出每个的第一个,然后输出这个串,然后继续输出到最后一个;

情况2:

抹除的那个在两头,即每个都头尾相连,这时直接在最后加个a就行了,加a加b不影响

代码:

/*
************************************
***********emu^w^*********** */ #include <bits/stdc++.h>
using namespace std; const int N = 110, M = 5e4 + 10; int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
string s[N];
for(int i = 1; i <= n - 2; i++) cin>>s[i]; if(n == 3)
{
cout<<s[1]<<"a"<<endl;
continue;
}
else {
bool flag = false;
char a, b;
int tes;
for(int i = 2; i <= n - 2; i++)
{
if(s[i][0] == s[i - 1][1]) continue;
else { //记录下来 在i的前边 缺一个 为s[i - 1][1] + s[i][0]
flag = true;
tes = i; //在tes后输出
a = s[i - 1][1], b = s[i][0];
break;
}
} if(!flag) {
for(int i = 1; i <= n - 2; i ++)
{
if(i == n - 2) cout<<s[i];
else cout<<s[i][0];
}
cout<<"a"<<endl;
continue;
}
else {
for(int i = 1; i <= n - 2; i++)
{
if(i == tes) {
cout<<a<<b;
if(i == n - 2) cout<<s[i][1];
continue;
}
else {
if(i == n - 2) cout<<s[i];
else cout<<s[i][0];
}
}
cout<<endl;
continue;
}
}
}
}

C. Paint the Array

题目大意:找到一个数,能将给出的数组中被所有相隔的数整除,而不能被其他数整除

思路:自然而然的想到分类讨论求gcd然后遍历判断对错

代码:

/*
************************************
***********emu^w^*********** */ #include <bits/stdc++.h>
using namespace std;
#define ll long long const int N = 110, M = 5e4 + 10; int main()
{
int T;
cin>>T;
while(T--)
{
ll q[N];
int n;
cin>>n;
for(int i = 1; i <= n; i++)
cin>>q[i]; ll gcd1 = q[1], gcd2 = q[2]; // gcd1是奇数项的总gcd ..
for(int i = 3; i <= n; i++)
if(i % 2 == 1) gcd1 = __gcd(gcd1, q[i]);
else gcd2 = __gcd(gcd2, q[i]); bool flag = false;
for(int i = 1; i <= n; i++)
if(i % 2 == 1) //用gcd2 去遍历奇数项
{
if(q[i] % gcd2 == 0) {
flag = true;
break;
}
} if(!flag) {
cout<<gcd2<<endl;
continue;
}
else flag = false; for(int i = 1; i <= n; i++)
if(i % 2 == 0)
if(q[i] % gcd1 == 0) {
flag = true;
break;
}
if(!flag) {
cout<<gcd1<<endl;
continue;
}
else cout<<"0"<<endl; }
}

D. Array and Operations

题目大意:给一个数组,进行k次操作,每次操作可以选两个数踢出数组然后求两个数的商(向下整除),然后把剩余的数直接加入答案,求最小总和

思路:首先比较好想的是,尽量消除大的元素,那么就从小到大排序,然后对于从大到小的k * 2个元素进行操作就行(比较好想)

然后对于这个区间的贪心,首先想到的是朴素做法,就是尽量消除重复,等到没有重复元素的时候直接停止就OK,如果还有的话就加重复元素个数/2

但是这样写比较麻烦(写了一个小时而且还错了的屑)

所以应该想到朴素做法时直接找不用操作的条件

发现只要在区间里找到重复元素最多的元素个数,然后判断个数是否大于这个区间大小的一半就行了

对于每个元素,其他元素都能与之相消,唯独自己相消会多出个“1”,所以当最多的元素大于区间剩余元素个数的时候,相减,/2,然后加进答案就可以了

/*
************************************
***********emu^w^*********** */ #include <bits/stdc++.h>
using namespace std;
#define ll long long const int N = 110, M = 5e4 + 10; int main()
{
int T;
cin>>T;
while(T--)
{
int n, k;
cin>>n>>k;
int q[N];
for(int i = 1; i <= n; i++) cin>>q[i];
sort(q + 1, q + n + 1);
k *= 2;
ll ans = 0;
int nums = 0;
for(int i = n; i >= n - k + 1; i--)
{
int j = i - 1;
while(q[i] == q[j] && j >= n - k + 1) j--; // i - j是相同元素个数 j - n + k 是小的元素个数 if(i - j >= j - n + k + nums) {
ans += (i - j - j + n - k - nums) / 2;
break;
}
else {
nums += i - j;
i = j + 1;
} } for(int i = 1; i <= n - k; i++) ans += q[i];
cout<<ans<<endl;
}
}

其实这里还是写的有点麻烦了,直接找最多元素然后判断个数就行。。。。

CodeForces Round #760 (Div. 3)的更多相关文章

  1. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  7. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

随机推荐

  1. 【Azure 应用服务】应用代码需要客户端证书进行验证,部署到App Service后,如何配置让客户端携带证书呢?

    问题描述 .NET 6 MVC应用,代码中要求客户端访问时候必须携带正确的证书,如果不携带或者携带错误的证书,都会得到 HTTP ERROR 403 Forbidden 错误 在App Service ...

  2. Solution -「WF2011」「BZOJ #3963」MachineWorks

    \(\mathcal{Description}\)   Link.   给定你初始拥有的钱数 \(C\) 以及 \(N\) 台机器的属性,第 \(i\) 台有属性 \((d_i,p_i,r_i,g_i ...

  3. Solution -「ARC 110E」Shorten ABC

    \(\mathcal{Description}\)   Link.   给定长度为 \(n\),包含 A, B, C 三种字符的字符串 \(S\),定义一次操作为将其中相邻两个不相同的字符替换为字符集 ...

  4. 书写高质量sql的一些建议

    It's better to light a candle than to curse the darkness 老生常谈的不要使用select * 如果硬要使用select *,那么就请忍受一下以下 ...

  5. set和setenv

    今天用set设置PATH变量(加一个路径),发现虽然echo的时候显示修改成功了,实际执行命令的时候确没有去那个路径查找:当前shell是c shell(csh). 在网上找了一些材料,总结如下:   ...

  6. 《深度探索C++对象模型》第一章 | 关于对象

    C++对象模式 非静态数据成员放置在每个类对象内,静态数据成员则被放置在所有类对象之外.静态和非静态的成员函数也被放置在所有类对象之外.每个类产生一堆指向虚函数的指针,放在虚表(vtbl)中.每个类对 ...

  7. 疑难杂症:运用 transform 导致文本模糊的现象探究

    在我们的页面中,经常会出现这样的问题,一块区域内的文本或者边框,在展示的时候,变得特别的模糊,如下(数据经过脱敏处理): 正常而言,应该是这样的: emmm,可能大图不是很明显,我们取一细节对比,就非 ...

  8. [c语言]左移和右移

    左移和右移都是位运算的概念.我们知道计算机是基于二进制保存数据的,因此左移和右移的概念十分重要.本文约定是32位的机器. [左移] 丢弃最高位,0补最低位 左移是把一个数按照二进制每位向左移动若干位, ...

  9. 技术小白的也能独立完成数据分析,这款BI系统你值得拥有

    是否有很多小白跟我一样,不会编程代码,又觉得excel操作太繁琐了,一直苦苦不知道要怎么做数据分析.前段时间我使用了一款bi系统,简直太方便了!拖拉拽就能制作分析图表.点击就能应用智能分析功能,如果这 ...

  10. C# 复杂类实例的相等判断

    在比较两个对象是否完全相同时,对于string, int等其他value object,可以直接通过"=="或者"Equals"来进行判断.但是对于复杂类,如下 ...