1 条题解
-
0
自动搬运
来自洛谷,原作者为

Grow_
AFO.搬运于
2025-08-24 22:42:30,当前版本为作者最后更新于2022-11-24 15:33:52,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题意
给出 条定义变量语句,问这些变量所占的空间。
题解
首先,因为输入可能含空格,所以我们要使用
getline输入,不能用cin!!!(我就被坑了)其次,因为
int、long long、string的首字母不同,所以我们可以根据首字母判断变量的类型。知道了变量类型,我们就可以判断他是否为数组了,因为题目规定定义数组一定会在变量类型后面加上一对中括号,所以我们只需要判断变量类型后面有没有中括号就行了。
因为字符串只要统计长度就行了,所以就不讲了。至于变量和数组,也还是比较好处理的。
如果是变量的话,只要统计逗号的数量,计算时把数量加一再乘以所占内存就行了就行了。
如果是数组的话的话,就需要算出每个数组的元素个数,这件事其实也比较简单,可以把数字串提取出来,再用一个函数来把这个字符串转为整型变量,再乘上一个所占的内存就可以了。
AC Code
#include <bits/stdc++.h> #define int long long using namespace std; int nc(string s){//string转int int po=0; for(int i = 0;i<s.size();i++){ po=po*10+(s[i]-'0'); } return po; } signed main(){ int n,cnt=0;//定义cnt来统计内存 string s; cin >> n; n++; for(int i = 1;i<=n;i++){ getline(cin,s);//可能含空格,使用getline if(s[0]=='i'){//计算int int c=0;//c表示这一个数组所占的内存 int f=s.find('[');//判断数组 if(f==-1){ for(int i = 0;i<s.size();i++){ if(s[i]==',')c+=4;//统计逗号数量 } cnt+=c+4;//加上内存大小 } else{ int r=0,l=s.find('[',r+1),p;//寻找第一个 r=s.find(']',l+1); while(l!=-1){ string s2=s.substr(l+1,r-l-1);//提取子串 p=nc(s2);//转int cnt+=p*4;//计算内存大小 l=s.find('[',r+1); r=s.find(']',l+1); //寻找下一个 } } } else if(s[0]=='l'){//判断long long int f=s.find('['); if(f==-1){//判断数组 int c=0;//c表示这一个数组所占的内存 for(int i = 0;i<s.size();i++){ if(s[i]==',')c+=8;//统计逗号数量 } cnt+=c+8;//加上内存大小 } else{ int r=0,l=s.find('[',r+1),p;//寻找第一个 r=s.find(']',l+1); while(l!=-1){ string s2=s.substr(l+1,r-l-1);//提取子串 p=nc(s2);//转int cnt+=p*8;//计算内存大小 l=s.find('[',r+1); r=s.find(']',l+1); //寻找下一个 } } } else{//判断string int r=0,l=s.find('"',r+1),p; r=s.find('"',l+1); while(l!=-1){ string s2=s.substr(l+1,r-l-1);//提取子串 cnt+=s2.size();//加上子串长度 l=s.find('"',r+1); r=s.find('"',l+1); //寻找下一个 } } } if(cnt>=1073741824){ cout << cnt/(1073741824) << "GB"; cnt%=(1073741824); } if(cnt>=1024*1024){ cout << cnt/(1024*1024) << "MB"; cnt%=(1024*1024); } if(cnt>=1024){ cout << cnt/1024 << "KB"; cnt%=1024; } if(cnt>0)cout << cnt << "B"; //输出答案 return 0; }最后,祝大家AC愉快!
- 1
信息
- ID
- 7968
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者