A 会长的烦心事
https://ac.nowcoder.com/acm/contest/3474/A
统计字符串中的相应的字符的个数,然后除以相应的系数求出最小值即可(第一个和最后一个l可以不共用计算最小值)
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin>>s) {
int a=0,e=0,l=0,g=0,o=0,u=0,f=0;
for(int i=0;i<s.length();i++) {
if(s[i]=='l')
l++;
if(s[i]=='e')
e++;
if(s[i]=='a')
a++;
if(s[i]=='g')
g++;
if(s[i]=='u')
u++;
if(s[i]=='o')
o++;
if(s[i]=='f')
f++;
}
int ans=min(l/2,min(e/2,min(a,min(g,min(u,min(o,f))))));
printf("%d\n",ans);
}
return 0;
}
B 快来秒掉我!
https://ac.nowcoder.com/acm/contest/3474/B
直接输出,注意转义字符\即可
#include<bits/stdc++.h>
using namespace std;
int main() {
printf("Do you want to play ACM?(yes\\no)");
return 0;
}
C 素数圆环
https://ac.nowcoder.com/acm/contest/3474/C
直接DFS计算输出即可,或者选择预处理后打表,但是数据太多放弃,直接DFS即可。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=25;
int num[MAXN];
bool vis[MAXN];
set<int> p;
int n;
void DFS(int z) {
if(z==n) {
bool flag=true;
if(!p.count(num[0]+num[n-1]))
flag=false;
if(flag) {
if(num[0]==1) {
for(int i=0;i<n;i++) {
if(i==0)
printf("%d",num[i]);
else
printf(" %d",num[i]);
}
printf("\n");
}
}
} else {
for(int i=1;i<=n;i++) {
if(!vis[i]) {
if(z==0) {
vis[i]=true;
num[z]=i;
DFS(z+1);
num[z]=0;
vis[i]=false;
} else {
if(p.count(i+num[z-1])) {
vis[i]=true;
num[z]=i;
DFS(z+1);
num[z]=0;
vis[i]=false;
}
}
}
}
}
return ;
}
int main() {
p.insert(2),p.insert(3),p.insert(5),p.insert(7);
p.insert(11),p.insert(13),p.insert(17),p.insert(19);
p.insert(23),p.insert(29),p.insert(31),p.insert(37);
p.insert(41),p.insert(43),p.insert(47),p.insert(53);
int cnt=1;
while (~scanf("%d",&n)) {
memset(num,0,sizeof(num));
memset(vis,false,sizeof(vis));
printf("Case %d:\n",cnt++);
if(n%2==1)
printf("\n");
else
DFS(0);
printf("\n");
}
return 0;
}
D 电脑磨损程度
https://ac.nowcoder.com/acm/contest/3474/D
将使用时间按照8小时进行分段计算,每八个小时就进行计算,对于小于等于4小时进行特判。对8求余后剩余的部分直接分成两部分,小于等于4和大于4的部分,小于等于4直接顺着上8个小时继续开机计算,大于的则单独进行计算
#include<bits/stdc++.h>
using namespace std;
int main() {
long long n;
while(~scanf("%lld",&n)&&n) {
if(n>=0&&n<=4) {
printf("10\n");
} else {
if(n<=8) {
printf("%lld\n",10+(n-4)*2);
} else {
double ans=0.0;
ans+=(n/8)*18;
n%=8;
if(n==1||n==2||n==3||n==4) {
ans+=2.4*n;
printf("%.1lf\n",ans);
}
else {
if(n==5||n==6||n==7)
ans+=10+(n-4)*2;
printf("%.0lf\n",ans);
}
}
}
}
return 0;
}
E ACMer如何拯救小学生
https://ac.nowcoder.com/acm/contest/3474/E
分隔每个单词同时每次只保存其首字母即可
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
while(~scanf("%d",&t)) {
getchar();
string s;
while(t--) {
getline(cin,s);
for(int i=0;i<s.length();i++) {
if(i==0) {
if(s[i]>='A'&&s[i]<='Z')
printf("%c",s[i]);
else
printf("%c",s[i]-32);
} else {
if(s[i]==' ') {
int j=i;
while(s[j]==' ')
j++;
if(s[j]>='A'&&s[j]<='Z')
printf("%c",s[j]);
else
printf("%c",s[j]-32);
i=j;
}
}
}
printf("\n");
}
}
return 0;
}
F 当会长和一群手贱的耗子在电梯相遇
https://ac.nowcoder.com/acm/contest/3474/F
计算输入数字的因子数目,数目为奇数说明可以到达,否则无法到达
#include<bits/stdc++.h>
using namespace std;
int main() {
long long n;
while(~scanf("%lld",&n)&&n) {
long long ans=0;
for(long long i=1;i<=sqrt(n);i++) {
if(n%i==0) {
if(i*i!=n)
ans+=2;
else
ans++;
}
}
if(ans%2==1)
puts("Goddess,I'm coming~~~");
else
puts("Farewell~");
}
return 0;
}
G ACMer分奖金
https://ac.nowcoder.com/acm/contest/3474/G
考虑贪心,按照钱币的数值从大到小进行使用即可求出最优解
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
while(~scanf("%d",&t)) {
while(t--) {
int n;
scanf("%d",&n);
long long ans=0;
for(int i=0;i<n;i++) {
int num;
scanf("%d",&num);
ans+=num/100;
num%=100;
ans+=num/50;
num%=50;
ans+=num/20;
num%=20;
ans+=num/10;
num%=10;
ans+=num/5;
num%=5;
ans+=num;
}
printf("%lld\n",ans);
}
}
return 0;
}
H 放轻松
https://ac.nowcoder.com/acm/contest/3474/H
直接sort即可
#include<bits/stdc++.h>
using namespace std;
vector<double> num;
int main() {
int n;
while(~scanf("%d",&n)) {
num.resize(n);
for(int i=0;i<n;i++)
scanf("%lf",&num[i]);
sort(num.begin(),num.end());
for(int i=0;i<n;i++) {
if(i==0)
printf("%.2lf",num[i]);
else
printf(" %.2lf",num[i]);
}
printf("\n");
}
return 0;
}
I ACM协会晚会
https://ac.nowcoder.com/acm/contest/3474/I
计算C(N,M)即可求出答案
#include<bits/stdc++.h>
using namespace std;
vector<long long> p;
void init(int n,int m) {
long long start=1,sum1=n;
for(int i=0;i<=m;i++) {
if(i==0)
p[i]=1;
else {
if(i==n)
p[i]=1;
else {
p[i]=p[i-1]*sum1;
sum1--;
p[i]/=start;
start++;
}
}
}
}
int main() {
int t;
while(~scanf("%d",&t)) {
while(t--) {
int n,m;
scanf("%d%d",&n,&m);
if(m>n)
printf("0\n");
else {
p.clear();
p.resize(n);
init(n,m);
printf("%lld\n",p[m]);
}
}
}
return 0;
}
J 会长爱旅游
https://ac.nowcoder.com/acm/contest/3474/J
每次记录前驱节点,之后每次直接输出前驱节点即可
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100011;
int pre[MAXN];
int main() {
int m;
while(~scanf("%d",&m)) {
memset(pre,0,sizeof(pre));
int n,s;
scanf("%d%d",&n,&s);
pre[s]=-1;
for(int i=0;i<n-1;i++) {
int a,b;
scanf("%d%d",&a,&b);
pre[b]=a;
}
for(int i=1;i<=n;i++) {
if(i==1)
printf("%d",pre[i]);
else
printf(" %d",pre[i]);
}
printf("\n");
}
return 0;
}