J - How Much Memory Your Code Is Using? Gym - 101955J

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Miranda_ymz/article/details/86589999

2018-2019 ACM-ICPC, Asia Shenyang Regional Contest

J - How Much Memory Your Code Is Using? Gym - 101955J

题意:一行只有一个变量!变量类型只有bool,char,int,float,double,long long,_int128,long double.不会有冲突的变量,只有一维数组或者一个变量,

思路:判断每一行是哪种类型的变量,并判断是数组元素还是单元素。就可以了。 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
const int tran=1024;
int f(string str)
{
	int len=str.size();
	int flag=0;
	int j,s_num=0;
	for(int i=0;i<len;i++)
	{
		if(str[i]==';') break;
		if(str[i]=='['){
			flag=1; 
			for(j=i+1;;j++){
				if(str[j]==']') break;
				s_num=s_num*10+str[j]-'0';
			}
			i=j+1;
		} 
	}
	if(!flag) return 1;
	else 
	return s_num;
}
int main()
{
	int t,cnt=0,n;
	scanf("%d",&t);
	string str;
	while(t--)
	{
		scanf("%d",&n);
		getchar();
		long long num=0;//字节 
		while(n--)
		{
			getline(cin,str);
			int len=str.size();
			if(str[0]=='b'||str[0]=='c')//bool 一字节 
			{
				num+=f(str); 
			}
			else if(str[0]=='i'||str[0]=='f')
			{
				num+=4*f(str);
			//	cout<<num<<endl;
			}
			else if(str[0]=='d'){
				num+=8*f(str);
			}
			else if(str[0]=='_'){
				num+=16*f(str);
			}
			else if(str[0]=='l')
			{
				if(str[5]=='d'){//long double  想用  substr   判断double 结果不对emm 
					num+=16*f(str);
				}
				else{
					num+=8*f(str);
				}
			}
			//cout<<num<<endl;
		}
		//cout<<num<<endl;
		int ans;
		if(num%tran==0) ans=num/tran;
		else ans=1+num/tran; 
		printf("Case #%d: %d\n",++cnt,ans);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Miranda_ymz/article/details/86589999
今日推荐