A Buy a Shovel
水题,问买鞋子的个数,直接暴力。
#include <bits/stdc++.h>
using namespace std;int main()
{int k,r,ans=0;scanf("%d%d",&k,&r);for (int i=1;i<10000;i++){if (i*k%10==0||i*k%10==r){ans=i;break;}}printf("%d\n", ans);
}
B Cormen --- The Best Friend Of a Man
贪心,优先选择中间的。
#include <bits/stdc++.h>
using namespace std;int a[505];
int main(int argc, char const *argv[])
{int n,k,ans=0;scanf("%d%d",&n,&k);for (int i=0;i<n;i++) scanf("%d",&a[i]);for (int i=1;i<n;i++){int cnt=a[i]+a[i-1];if (cnt<k){a[i]+=k-cnt;ans+=k-cnt;}}printf("%d\n", ans);for (int i=0;i<n;i++){if (i) printf(" ");printf("%d",a[i] );}printf("\n");return 0;
}
C Sanatorium
因为只考虑吃饭的总数,那么来去的那一天可以移到一天去不算,待的整天数为max(a,b,c)-1,直接求了。
#include <bits/stdc++.h>
using namespace std;int main(int argc, char const *argv[])
{long long a,b,c;scanf("%I64d%I64d%I64d",&a,&b,&c);long long m=max(max(a,b),c);long long ans=0;if (a<m) ans+=m-1-a;if (b<m) ans+=m-1-b;if (c<m) ans+=m-1-c;printf("%I64d\n", ans);return 0;
}
D Eams
二分需要的天数,对于每次二分的天数,从后往前扫一遍看是否满足。
#include <bits/stdc++.h>
using namespace std;const int N=1e5+5;
int d[N],a[N];
int n,m;
int vis[N],cnt[N];
std::vector<int> v;int ok(int t){memset(vis,0,sizeof(vis));memset(cnt,0,sizeof(cnt));int p=0;v.clear();for (int i=t;i>=1;i--){if (d[i]&&!vis[d[i]]){vis[d[i]]=1;cnt[d[i]]=a[d[i]];v.push_back(d[i]);}else{if (p<v.size()){cnt[v[p]]--;if (!cnt[v[p]]) p++;}}}for (int i = 1; i <= m; ++i){/* code */if (!vis[i]) return 0;}return p==v.size();
}
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) scanf("%d",&d[i]);for (int i=1;i<=m;i++) scanf("%d",&a[i]);int l=0,r=n+1;while (l+1<r){int mid=(l+r)/2;if (ok(mid)) r=mid;else l=mid;}if (r==n+1) r=-1;printf("%d\n", r);
}
E SocketsF Tourist Reform