A题
题意:给定一串数列,t,t+s,t+s+1,t+2s,t+2s+1......问某一个数是否是数列当中的
题意:只需判断(x-t)与(x-t-1)能否整除s即可,注意起始时的判断
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 int t,s,x; 15 int main() 16 { 17 while(cin>>t>>s>>x) 18 { 19 int flag=0; 20 if(x<=t+1){ 21 if(x==t) 22 flag=1; 23 }else{ 24 if((x-t)%s==0){ 25 flag=1; 26 }else if((x-t-1)%s==0){ 27 flag=1; 28 } 29 } 30 if(flag) cout<<"YES"<<endl; 31 else cout<<"NO"<<endl; 32 } 33 return 0; 34 }
B题
题意:给定科学技术法,求出这个数
分析:直接模拟即可
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 string s; 15 int main() 16 { 17 while(cin>>s) 18 { 19 int k; 20 for(int i=0;i<s.length();i++){ 21 if(s[i]=='e'){ 22 k=i; break; 23 } 24 } 25 int sum=0; 26 for(int i=k+1;i<s.length()-1;i++){ 27 sum+=(s[i]-'0'); 28 sum*=10; 29 } 30 sum+=s[s.length()-1]-'0'; 31 // cout<<sum<<endl; 32 int len=k-2; 33 int h=sum; 34 int cnt=0; 35 if(sum==0) 36 cnt=1; 37 while(h){ 38 h/=10; 39 cnt++; 40 } 41 // cout<<cnt<<endl; 42 // cout<<len<<endl; 43 if(len==1&&s[2]=='0'&&sum==0) 44 { 45 cout<<s[0]<<endl; 46 continue; 47 } 48 if(sum<len){ 49 cout<<s[0]; 50 for(int i=2;i<sum+2;i++) 51 cout<<s[i]; 52 cout<<"."; 53 for(int i=sum+2;i<s.length()-cnt-1;i++) 54 cout<<s[i]; 55 cout<<endl; 56 }else if(sum==len){ 57 cout<<s[0]; 58 for(int i=2;i<s.length()-cnt-1;i++) 59 cout<<s[i]; 60 cout<<endl; 61 }else{ 62 cout<<s[0]; 63 for(int i=2;i<s.length()-cnt-1;i++) 64 cout<<s[i]; 65 for(int i=0;i<sum-len;i++) 66 cout<<"0"; 67 cout<<endl; 68 } 69 } 70 return 0; 71 }
C题:
题意:给定每条边上的权值,求树上两点之间的距离
分析:对于两个结点x和y。我们记录下x到y每一步的权值,直到x与y的值相等为止,注意数据范围比较大,用map记录比较好
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 map<long long ,long long> mp; 15 int main() 16 { 17 int q; 18 cin>>q; 19 while(q--) 20 { 21 int num; 22 cin>>num; 23 if(num==1) 24 { 25 long long x,y,cost; 26 cin>>x>>y>>cost; 27 while(x!=y) 28 { 29 if(x>y) 30 { 31 mp[x]+=cost; 32 x/=2; 33 }else{ 34 mp[y]+=cost; 35 y/=2; 36 } 37 } 38 } 39 else 40 { 41 long long x,y; 42 cin>>x>>y; 43 long long res=0; 44 while(x!=y) 45 { 46 if(x>y) 47 { 48 res+=mp[x]; 49 x/=2; 50 }else 51 { 52 res+=mp[y]; 53 y/=2; 54 } 55 } 56 cout<<res<<endl; 57 } 58 } 59 return 0; 60 }