补题记录。当然先从顺序刷。。
1.
Educational Codeforces Round 60 (Rated for Div. 2) B. Emotes
https://codeforces.com/contest/1117/problem/B
题目大意:给定n个数字,一共进行m次加法操作,但是对于同一个数字一次只能加k次,然后需要一个数字进行分割才能继续加。
要求最大值肯定是两个最大的子值累加得到,考虑到数字已经开到ll,循环可能会TLE,直接记录一组值循环值,然后*循环次数,加上最后的未循环余数*最大值(余数肯定轮不到次大值),求和即可。
AC代码:
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int n;
ll m,k;
ll a[200005];
int main() {
cin>>n>>m>>k;
for(int i=0;i<n;i++) {
cin>>a[i];
}
sort(a,a+n);
ll num=m/(k+1);
ll yu=m-(k+1)*(m/(k+1));
ll xunhuan=k*a[n-1]+a[n-2];
ll res=num*xunhuan + yu*a[n-1];
cout<<res<<endl;
}
2.
Codeforces Round #126 (Div. 2) B. Drinks
https://codeforces.com/contest/200/problem/B
题目大意:浓度问题。。求不同浓度的果汁混合后浓度。
不用考虑什么公式,直接预设每一杯都是100ml,果汁有xx ml,求和相除即可。
AC代码:
#include <iostream>
#include <cmath>
#include <stack>
#include <cstring>
#include <string>
#include <set>
using namespace std;
typedef long long ll;
int n;
double a[110];
double num,sum;
double ans;
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%lf",&a[i]);
sum+=a[i];
}
num=n*100;
printf("%.8lf",(sum/num)*100);
return 0;
}
3.
Codeforces Beta Round #46 (Div. 2) A. Sleuth
https://codeforces.com/contest/49/problem/A
题目大意:给定一长串字符串,问最后一个字母字符(除去空格和标点符号),是不是他定义的元音(多了个'y'&'Y')。
直接从后往前询问,若满足'a'~'z'||'A'~'Z'就判断是否是元音,然后直接break循环即可。
AC代码:
#include <iostream>
#include <cmath>
#include <stack>
#include <cstring>
#include <string>
#include <set>
using namespace std;
typedef long long ll;
char a[100005];
char ss;
set<char> s;
int main() {
gets(a);
int len=strlen(a);
for(int i=len;i>=0;i--) {
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')) {
if (a[i] == 'a' || a[i] == 'e' || a[i] == 'i'||a[i]=='o'||a[i]=='u'||a[i]=='y'||a[i]=='A'||a[i]=='E'||a[i]=='I'||a[i]=='O'||a[i]=='U'||a[i]=='Y') {
cout << "YES" << endl;
break;
} else {
cout << "NO" << endl;break;
}
} else {
continue;
}
}
return 0;
}
4.
Codeforces Round #379 (Div. 2) A. Anton and Danik
https://codeforces.com/contest/734/problem/A
题目大意:统计A与D个数,谁多输出谁。
AC代码:
#include <iostream>
#include <cmath>
#include <stack>
#include <cstring>
using namespace std;
typedef long long ll;
char a[100005];
int n;
ll p,q;
int main() {
cin>>n;
for(int i=0;i<n;i++) {
cin>>a[i];
if(a[i]=='A') p++;
else if(a[i]=='D') q++;
}
if(p>q) cout<<"Anton"<<endl;
else if(p<q) cout<<"Danik"<<endl;
else if(p==q) cout<<"Friendship"<<endl;
}
5.
Codeforces Round #353 (Div. 2) A. Infinite Sequence
https://codeforces.com/contest/675/problem/A
题目大意:这题的意思是给a,b,c三个数字,问从[a~a+n*c]整数区间内是否恰好有b。
直接分类讨论,代码稍长。
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long ll;
ll a,b,c;
int main() {
cin>>a>>b>>c;
if(a==b) cout<<"YES"<<endl;
else {
if(c==0) {
if(a==b) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else if(c>0) {
if(a<b&&(b-a)%c==0) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else if(c<0) {
if(a>b&&(b-a)%c==0) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return 0;
}
6.
Helvetic Coding Contest 2017 online mirror (teams allowed, unrated) G. Fake News (easy)
https://codeforces.com/contest/802/problem/G
题目大意:求问一定长度字符串内是否含有heidi按顺序排列但可以不连续的字符串。
这题并不相同于最长公共子序列。可以直接判断。
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long ll;
char a[1005];
char b[6]={'h','e','i','d','i'};
bool check(char a[],int len){
bool f;
int i = 0;
for (int j=0;j<5;j++) {
f = false;
while (i<len) {
if (a[i] == b[j]) {
f=1;
i++;
break;
}
i++;
}
if (!f) return false;
}
return true;
}
int main() {
cin>>a;
int len=strlen(a);
if(check(a,len)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}
7.
Codeforces Round #164 (Div. 2) B.Buttons
https://codeforces.com/contest/268/problem/B
题目大意:有n个开关,有且只有一种排列可以全部按下,否则按错当前开关,之前的开关都会弹开,需要重新计数。问最大的尝试次数。
递推/递归
可以发现这题明显存在着规律性。
试考虑对于所有的开关,必定有至少1次的按下次数(正确次数),且对于最后一个开关有且只有1次。
而对于第i个开关,可尝试次数与(n-i)有关,且考虑到按错之前的需要全部重按,那么对于第i个开关,需要尝试的次数就是
for(int I=2;i<=n-1;i++){
a[I]=(n-i)*i(错误次数) + 1 (正确次数)
}
然后累加即可。
AC代码:
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
ll n;
ll a[2005];
int num;
int main() {
cin>>n;
for(int i=2;i<=n-1;i++) {
a[i]=(n-i)*i + 1;
num+=a[i];
}
num=num+1+n;
if(n==1) cout<<1<<endl;
else
cout<<num<<endl;
return 0;
}
8.
Codeforces Round #200 (Div. 2) A. Magnets
https://codeforces.com/contest/344/problem/A
题目大意:按照01/10分磁铁的阴阳极,问按给定顺序排列的话有多少分组。
那么很明显,1001或者1001如果相连必然会排斥,生成1+1组。
我们只需记录按顺序输入有多少不一样的即可。
AC代码:
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
ll n;
int a[100005];
int num;
int main() {
cin>>n;
for(int i=0;i<n;i++) {
cin>>a[i];
}
for(int i=0;i<n;i++) {
if(a[i]!=a[i+1]) {
num++;
}
}
cout<<num<<endl;
return 0;
}
9.
Codeforces Round #340 (Div. 2) A. Elephant
https://codeforces.com/contest/617/problem/A
题目大意:一只大象可以走(int)1~5步/次,问走到n需要多少步。
直接贪心。每次走最大的步数,然后看剩下多少即可。
AC代码:
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
ll n;
int a[110];
int b[110];
int num;
int main() {
cin>>n;
for(int i=5;i>=1;i--) {
num+=n/i;
n=n-(n/i)*i;
}
cout<<num<<endl;
return 0;
}
10.
Codeforces Beta Round #97 (Div. 2) A.Present
https://codeforces.com/contest/136/problem/A
题目大意:这题有点意思,问的是交错给礼物,问第i个人的礼物来自谁。
开两个数组,一个记录原始值方便更改,然后一次遍历,如果第i个人的值是k,则b[k]=i即可。
AC代码:
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
int n;
int a[110];
int b[110];
int num;
int main() {
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i];
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if(i==a[j]) {
b[i]=j;
break;
}
}
}
for(int i=1;i<=n-1;i++) {
cout<<b[i]<<" ";
}cout<<b[n]<<endl;
}
11.
Codeforces Round #161 (Div. 2) A. Beautiful Matrix
https://codeforces.com/contest/263/problem/A
题目大意:问1的行列值离矩阵最中心差多少。。。
AC代码:
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
int a[5][5];
int x,y;
int num;
int main() {
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
cin>>a[i][j];
if(a[i][j]==1) {
x=i;
y=j;
}
}
}
num=abs(2-x)+abs(2-y);
cout<<num<<endl;
}
12.
Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) A. Between the Offices
https://codeforces.com/contest/867/problem/A
题目大意:给定一串字符串,要求比较是SF还是FS次数多。
AC代码:
#include <iostream>
using namespace std;
typedef long long ll;
ll num;
char s[100];
ll n;
ll num1,num2;
ll a,b,c,d,e;
int main() {
cin>>n;
for(int i=0;i<n;i++) {
cin>>s[i];
}
for(int i=0;i<n;i++) {
if(s[i]=='S'&&s[i+1]=='F') num1++;
else if(s[i]=='F'&&s[i+1]=='S') num2++;
}
num1>num2?cout<<"YES"<<endl:cout<<"NO"<<endl;
}
13.
Codeforces Round #473 (Div. 2) A. Mahmoud and Ehab and the even-odd game
https://codeforces.com/contest/959/problem/A
题目大意:纯粹的奇偶数判断。
#include <iostream>
using namespace std;
typedef long long ll;
ll num;
char s[100];
ll n;
ll a,b,c,d,e;
int main() {
cin>>n;
if(n%2) cout<<"Ehab"<<endl;
else cout<<"Mahmoud"<<endl;
return 0;
}
14.
Codeforces Round #492 (Div. 2) [Thanks, uDebug!] A.Hit the Lottery
https://codeforces.com/contest/996/problem/A
题目大意:同上面那个大象,贪心。
#include <iostream>
using namespace std;
typedef long long ll;
ll num;
char s[100];
ll n;
ll a,b,c,d,e;
int main() {
cin>>n;
a=n/100;
n=n-100*(n/100);
b=n/20;
n=n-20*(n/20);
c=n/10;
n=n-10*(n/10);
d=n/5;
e=n-5*(n/5);
num=a+b+c+d+e;
cout<<num<<endl;
return 0;
}
15.
Codeforces Round #465 (Div. 2) A. Fafa and his Company
https://codeforces.com/contest/935/problem/A
题目大意:将员工分组,每组里有一位领导,问最小的分组数。
实际上就是问除去其本身的公因数。看出这一点就很简单。
AC代码:
#include <iostream>
using namespace std;
int num;
char s[100];
int n;
int main() {
cin>>n;
for(int i=1;i<n;i++) {
if(n%i==0) {
num++;
}
}
cout<<num<<endl;
return 0;
}
16.
Codeforces Round #404 (Div. 2) A. Anton and Polyhedrons
https://codeforces.com/contest/785/problem/A
题目大意:给定n个多面体,求面数之和。
直接枚举相加。注意由于每个多面体首字母不同,可直接判断。
AC代码:
#include <iostream>
using namespace std;
int num;
char s[100];
int n;
int main() {
cin>>n;
for(int i=0;i<n;i++) {
cin>>s;
if(s[0]=='T') num+=4;
else if(s[0]=='C') num+=6;
else if(s[0]=='O' ) num+=8;
else if(s[0]=='D') num+=12;
else if(s[0]=='I') num+=20;
}
cout<<num<<endl;
return 0;
}
17.
Codeforces Round #366 (Div. 2) A.Hulk
https://codeforces.com/contest/705/problem/A
题目大意:一个人情感复杂,一边说love一边说hate。
找规律输出即可。
AC代码:
#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
//int num;
int main() {
cin>>n;
for(int i=1;i<=3*n;i++) {
for(int j=0;j<n;j++) {
if(i==1+j*3) cout<<"I ";
else if(i==2+6*j) cout<<"hate ";
else if(i==5+6*j) cout<<"love ";
else if(i==3+3*j&&i!=3*n) cout<<"that ";
}
if(i==3*n) cout<<"it";
}
return 0;
}
18.
Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) A. Bear and Big Brother
https://codeforces.com/contest/791/problem/A
题目大意:两头牛比重量,弟弟能翻3倍,哥哥体重只能涨2倍。问弟弟何时超过哥哥。
AC代码:
#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
int num;
char s[10000];
bool f;
int main() {
cin>>n>>k;
int year=1;
for(int i=1;i<=10;i++) {
n=3*n;
k=2*k;
if(n>k) {
year=i;break;
}
}
cout<<year<<endl;
return 0;
}
19.
Technocup 2019 - Elimination Round 1 https://codeforces.com/contest/1030/problem/A
https://codeforces.com/contest/1030/problem/A
题目大意:询问是否有1。
AC代码:
#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
int num;
char s[10000];
bool f;
int main() {
cin>>n;
for(int i=0;i<n;i++) {
cin>>k;
if(k==0) continue;
else f=1;
}
if(f) cout<<"HARD"<<endl;
else cout<<"EASY"<<endl;
return 0;
}
20.
Codeforces Round #479 (Div. 3) A. Wrong Subtraction
https://codeforces.com/contest/977/problem/A
题目大意:尾数为0就--,否则/=10;
AC代码:
#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
int num;
char s[10000];
stack<char> ss;
int main() {
cin>>n>>k;
while(k--) {
if(n%10) n--;
else n/=10;
}
cout<<n<<endl;
return 0;
}
21.
Codeforces Round #230 (Div. 2) A. Nineteen
https://codeforces.com/contest/393/problem/A
题目大意:问字符串中有多少个nineteen;
用i来判断个数,同时限定n,e,t的个数大小,判断即可。
AC代码:
#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
int N,I,T,E;
int num;
char s[10000];
stack<char> ss;
int main() {
cin>>s;
int len=strlen(s);
for(int i=0;i<len;i++) {
ss.push(s[i]);
if(ss.top()=='n') {
N++;
}
else if(ss.top()=='i') {
I++;
}
else if(ss.top()=='t') {
T++;
}
else if(ss.top()=='e') {
E++;
}
}
for(int i=1;i<=I;i++) {
if(N>2*i&&E>=3*i&&T>=i) {
num++;
}
}
if(num)cout<<num<<endl;
else cout<<0<<endl;
return 0;
}
22.
Technocup 2019 - Elimination Round 3 A. Kitchen Utensils
https://codeforces.com/contest/1032/problem/A
题目大意:有不同类型的盘子,问有可能最少少了多少个。
AC代码:
#include <iostream>
#include <algorithm>
#include <set>
#include <cmath>
using namespace std;
int n,k;
int a[105];
int ans=1;
int maxx=-10000;
int cnt;
int num;
int res;
set <int> s;
int main() {
cin>>n>>k;
for(int i=0;i<n;i++) {
cin>>a[i];
s.insert(a[i]);
}
sort(a,a+n);
maxx=1;
for(int i=0;i<n;i++) {
if(a[i]==a[i+1]){
ans++;
if(ans>maxx) maxx=ans;
}
else ans=1;
}
if(maxx%k==0) {
cnt=maxx/k;
}else {
cnt = ceil(maxx / k+0.1);
}
num=s.size();
res=cnt*k*num-n;
if(res>=0) cout<<res<<endl;
else cout<<0<<endl;
return 0;
}
~22~