2 条题解
-
0
这道题目是真的坑,表述有很大的缺陷。很多人不理解样例是因为——返还的钱不能加在收到的钱中!
我们过一遍样例:以 dave 举例,他将 元送给 个人,每个人分得 元,实际送出 元。后来他又收到了 owen 送的 元,因此收到的钱比送出的钱多 元。其他人以此类推。
注意到了吗?返还的钱没有起一点作用!但题目中没有说明导致很多人卡在样例上。
我也是从洛谷某用户的口中得知这一信息收到的钱比送出的钱多多少,其实就是求每个人“赚”的钱。
代码就很简单了,这里使用 map 记录每个人“赚”的钱。
#include <bits/stdc++.h> using namespace std; int n,m,p; string s[11],ss,k; map<string,int> out;//STL大法好! int main(){ cin>>n; for (int i=1;i<=n;i++){ cin>>s[i]; } for (int i=1;i<=n;i++){ cin>>ss>>m>>p; if (!p){//防止被0除 continue; } k=ss; for (int i=1;i<=p;i++){ cin>>ss; out[ss]+=m/p; } out[k]-=m/p*p;//计算实际送出的钱 } for (int i=1;i<=n;i++){ cout<<s[i]<<" "<<out[s[i]]<<endl; } return 0; }
-
0
按着他说的一点点模拟即可:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main() { int m,n,s,sum=m; cin>>m>>n; for (int i=1;i<=n;i++) { cin>>s; int a[sum+1],r=1; for (int j=1;j<=sum;j++) { a[j]=s%10; s/=10; } sort(a+1,a+sum+1); while (a[r]==a[r+1]) { r++; } sum-=r; } if (sum==1) { cout<<1; } else { cout<<-2; } return 0; }
- 1
信息
- ID
- 933
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 43
- 已通过
- 26
- 上传者