Codeforces Round #582 (Div. 3)
Posted emcikem
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #582 (Div. 3)相关的知识,希望对你有一定的参考价值。
A Chips Moving
传送门
就是一堆木块,你需要做的是把某个木块±2或者±1,但是±1需要硬币。使得最后全部数相同
分析发现,所以奇数可以通过±2得到相同,所有偶数也是,所以,最后只要把奇数或偶数变成一样的数即可,那么也就是求奇数和偶数的最小个数。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
int n;
cin>>n;
int e=0,o=0;
while(n--)
int x;
cin>>x;
if(x&1)o++;
else e++;
printf("%d\n",min(o,e));
return 0;
B Bad Prices
传送门
bad price 是指如果第天的价格是a,那么之后的价格如果小于a,那么第i的价格a就是bad price
我们选择的方法是从后面开始记录,不断更新最小值,然后如果该天的价格大于当前最小值,那么就是一个bad price
#include <iostream>
#include <cstdio>
#define ll long long
#define il inline
using namespace std;
const int N=150005;
inline ll read()
char ch=getchar();ll x=0,f=1;
while(ch<'0'||ch>'9')if(ch=='-')f=-1;ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0';ch=getchar();
return x*f;
int main()
ll t;
cin>>t;
while(t--)
ll n;
scanf("%lld",&n);
ll a[N];
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
int ans=0;
int minn=1e6+5;
for(int i=n-1;i>=0;i--)
if(a[i]>minn)
ans++;
else
minn=a[i];
printf("%d\n",ans);
return 0;
C Book Reading
方法一
利用数字的特点,因为数字太大,枚举是不可能的。但是只需要把[1,n]里所有m的倍数的个位数相加即可,那么只需要找出所有个位数的规律,以及有几个m的倍数属于[1,n]
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
ll a[]=2,4,6,8,0;
ll b[]=3,6,9,2,5,8,1,4,7,0;
ll c[]=4,8,2,6,0;
ll d[]=5,0;
ll e[]=6,2,8,4,0;
ll f[]=7,4,1,8,5,2,9,6,3,0;
ll g[]=8,6,4,2,0;
ll h[]=9,8,7,6,5,4,3,2,1,0;
ll j[]=1,2,3,4,5,6,7,8,9;
int main()
int t;
cin>>t;
while(t--)
ll n,m;
cin>>n>>m;
ll sum=0;
ll x=n/m;
switch(m%10)
case 1: sum=45*(x/10);for(int i=0;i<x%10;i++)sum+=j[i];break;
case 2: sum=20*(x/5);for(int i=0;i<x%5;i++)sum+=a[i];break;
case 3: sum=45*(x/10);for(int i=0;i<x%10;i++)sum+=b[i];break;
case 4: sum=20*(x/5);for(int i=0;i<x%5;i++)sum+=c[i];break;
case 5: sum=5*(x/2);for(int i=0;i<x%2;i++)sum+=d[i];break;
case 6: sum=20*(x/5);for(int i=0;i<x%5;i++)sum+=e[i];break;
case 7: sum=45*(x/10);for(int i=0;i<x%10;i++)sum+=f[i];break;
case 8: sum=20*(x/5);for(int i=0;i<x%5;i++)sum+=g[i];break;
case 9: sum=45*(x/10);for(int i=0;i<x%10;i++)sum+=h[i];break;
printf("%lld\n",sum);
return 0;
方法二:
以上是关于Codeforces Round #582 (Div. 3)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #582 (Div. 3)
Codeforces Round #582 (Div. 3) 解题记录
Codeforces Round #436 E. Fire(背包dp+输出路径)