A. Find the Twins

这一题是一个水题
但要注意输出的格式
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<vector>
#define ll long long
using namespace std;
ll read(){
    ll x=0,w=1;
    char ch=0;
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return w*x;
}//快读算法
bool IsPrimeNumber(int n){//判断该数是不是素数
    if (n==2){
        return true;
    }
    if (n%2==0||n==1){
        return false;
    }
    int sqrtn=(int)sqrt((double)n);
    bool flag=true;
    for (int i=3;i<=sqrtn;i+=2){
        if (n%i==0){
            flag=false;
        }
    }
    return flag;
}//快速判断某个数是不是素数的算法
//==================================
const int maxn=1e5+7;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
const int EPS=1e-6;
ll binarymod(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1)
        res=(res*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return res;
}
//利用二进制来算a的b次方的模板
//===================================
//=========================
int main(){
    int T;
    cin>>T;
    int t;
    while(T--){
    	int m=-1,z=-1;
    	int num[10]={0};
    	for(int i=0;i<10;i++){
    		cin>>num[i];
    		if(num[i]==17){
    			z=1;
			}
			if(num[i]==18){
				m=1;
			}
		}
		for(int i=0;i<10;i++){
			cout<<num[i];
			if(i<9){
				cout<<" ";
			}
		}
		cout<<endl;
		if(m==1&&z==1){
			cout<<"both"<<endl;
		}
		if(m==-1&&z==-1){
			cout<<"none"<<endl;
		}
		if(m==1&&z==-1){
			cout<<"mack"<<endl;
		}
		if(m==-1&&z==1){
			cout<<"zack"<<endl;
		}
		cout<<endl;
	}
    return 0;
}

B. Medal Ranking

这一题也是一个水题,简单模拟过程,注意输出格式即可
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<vector>
#define ll long long
using namespace std;
ll read(){
    ll x=0,w=1;
    char ch=0;
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return w*x;
}//快读算法
bool IsPrimeNumber(int n){//判断该数是不是素数
    if (n==2){
        return true;
    }
    if (n%2==0||n==1){
        return false;
    }
    int sqrtn=(int)sqrt((double)n);
    bool flag=true;
    for (int i=3;i<=sqrtn;i+=2){
        if (n%i==0){
            flag=false;
        }
    }
    return flag;
}//快速判断某个数是不是素数的算法
//==================================
const int maxn=1e5+7;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
const int EPS=1e-6;
ll binarymod(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1)
        res=(res*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return res;
}
//利用二进制来算a的b次方的模板
//===================================
//=========================
int main(){
    int T;
    cin>>T;
    int t;
    while(T--){
    	int Am[3]={0},Ru[3]={0};
    	for(int i=0;i<3;i++){
    		cin>>Am[i];
		}
		for(int i=0;i<3;i++){
			cin>>Ru[i];
		}
		//输出序列 
		int sumA=0,sumR=0;
		for(int i=0;i<3;i++){
			cout<<Am[i]<<" ";
			sumA=sumA+Am[i];
		}
		for(int i=0;i<3;i++){
			cout<<Ru[i];
			if(i<2){
				cout<<" ";
			}else{
				cout<<endl;
			}
			sumR=sumR+Ru[i];
		}
		int f=0;//输出标记 
		if(sumA>sumR){
			f++;
		}
		for(int i=0;i<3;i++){
			if(Am[i]>Ru[i]){// win 
				f=f+2;
				break;
			}else if(Am[i]==Ru[i]){
				continue;
			}else{
				break;
			}
		}
		if(f==1){
			cout<<"count"<<endl;
		}else if(f==2){
			cout<<"color"<<endl;
		}else if(f==3){
			cout<<"both"<<endl;
		}else if(f==0){
			cout<<"none"<<endl;
		}
		cout<<endl;
	}
    return 0;
}

C. Brownies vs. Candies vs. Cookies

题意:这一题也是一个水题,题意就是要你分蛋糕,但是要保证蛋糕的数量永远不为0,你可以将蛋糕的数量增加2倍来达到要求,
简单模拟即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int cont;/*这是当前面包的数量*/ 
void app(int a){
	while(cont-a<=0){
		cont=cont*2;
	}
}
int main(){
	int T;
	cin>>T;/*样例的个数*/
	int humnum=0,brnum=0,m;
	int number=0;
	int ff=1;
	
	while(T--){
		cin>>humnum>>brnum;/*这代表学生的人数,与蛋糕的总数*/
		cin>>m;
		int num[100];
		for(int i=0;i<m;i++){
			cin>>num[i];/*是指这一批次的学生的人数*/
		}/*数据输入完毕,下面开始处理*/
		cont=brnum;/*当前的面包数目*/
		cout<<"Practice #"<<ff<<": "<<humnum<<" "<<brnum<<endl;
		ff++;
		/*下面是输出答案*/	
		for(int i=0;i<m;i++){
			//当前人数---num[i]
			app(num[i]);
			cout<<num[i]<< " "<<cont-num[i]<<endl;
			cont= cont-num[i];
		}
		cout<<endl;
	} 
    return 0;
}

D. Lemonade Stand

题意:这也是一个简单的模拟,但要注意的是糖的单位换算,还有就是要注意你的原料没有用完可以留着后面用
#include<iostream>
#define ll long long
using namespace std;
struct node{
	int c,pl,ps;
};
int main(){
	ll n,d,x,s;
	cin>>n;/*样例的数量*/
	while(n--){
		cin>>d>>x>>s;/*天数  一杯柠檬水的柠檬的数量  与  糖的数量*/
		struct node ptr[10000];
		for(int i=1;i<=d;i++){//输入 d 天的数据 
			cin>>ptr[i].c>>ptr[i].pl>>ptr[i].ps;
		}//数据输入完毕,下面开始处理数据
		ll ans=0;/*存储答案*/
		//柠檬和糖分开买
		int sum=0;
		for(int i=1;i<=d;){
			sum=ptr[i].c;/*当天所需要的糖水的杯数*/
			int j=i;
			while(ptr[j].pl<ptr[i+1].pl&&i+1<=d){
				i++;
				sum=sum+ptr[i].c;
			}
			ans=ans+sum*x*ptr[j].pl;/*当天每个的价钱*/
			i++;
			sum=0;
		} 
		int cont=0;//这里存储上一次所剩的 糖
		for(int i=1;i<=d;){
			sum=ptr[i].c;/*当天所需的杯数*/
			int j=i;
			while(ptr[j].ps<ptr[i+1].ps&&i+1<=d){
				i++;
				sum=sum+ptr[i].c;
			}
			//sum是指柠檬水的杯数
			int number=sum*s;//所需糖的数量
			if(cont<number){/*所剩的糖小于所需的糖,所以这一次需要买糖*/
				number=number-cont;
				cont=0;//将所剩的糖消耗完毕 
			}else{//所剩的糖大于所需的糖,所以这一次不需要买糖,但会消耗所剩的糖 
				cont=cont-number;
				number=0;/*本次所买的糖为  0 */
			}
			//number--是指这一次我们需要买的糖
			int t;//这一次所买糖的袋数 
			if(number%80==0){
				t=number/80;
			}else{
				t=number/80+1;
			}
			int numsum=t*80;/*80盎司一袋*/
			cont=cont+(numsum-number);
			ans=ans+t*ptr[j].ps;
			i++;
		}
		cout<<ans<<endl; 
	}
	return 0;
}

E. Rain Gauge

题意:这是一个简单的集合计算,难点是计算在不知道圆心角的情况下计算扇形的面积,这里我们需要借助
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<vector>
#define ll long long
using namespace std;
ll read(){
    ll x=0,w=1;
    char ch=0;
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return w*x;
}//快读算法
bool IsPrimeNumber(int n){//判断该数是不是素数
    if (n==2){
        return true;
    }
    if (n%2==0||n==1){
        return false;
    }
    int sqrtn=(int)sqrt((double)n);
    bool flag=true;
    for (int i=3;i<=sqrtn;i+=2){
        if (n%i==0){
            flag=false;
        }
    }
    return flag;
}//快速判断某个数是不是素数的算法
//==================================
const int maxn=1e5+7;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
const int EPS=1e-6;
ll binarymod(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1)
        res=(res*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return res;
}
//利用二进制来算a的b次方的模板
//===================================
//=========================
const double pi=3.14159265358979;
int main(){
    int T;
    cin>>T;
    int l,r;
    while(T--){
    	cin>>l>>r;/*整数*/
    	double m1=((l*1.0)/2)*sqrt(2);
    	double m2=(l*1.0)/2;
    	if(r*1.0<=m2){
    		printf("%.2f\n",r*1.0*r*pi);
		}else if(r*1.0>=m1){
			printf("%.2f\n",l*l*1.0);
		}else{
			//斜边  r  直角边是  m2
			double l2=sqrt(r*r*1.0-m2*m2*1.0);
			double sum=l2*m2;
			double dd=m2*1.0/r;//cos值
			double y=2*(dd*dd)-1;//cos2 
			double a=acos(y);
			double S=a*r*(r*1.0/2);
			double S1=S-sum;
			printf("%.2f\n",r*r*pi-(4*S1*1.0));
		}
	}
    return 0;
}

F. Balanced Strings

这一题可是非常有意思,题目定义了一个平衡字符串,意思是要保证所给字符串中所有子串中长度为偶数的子串中元音字母(‘y’也算)和辅音字母相等。
#include<iostream>
#include<string.h>
using namespace std;
typedef long long ll;
const int N=1e2+10;
char s[N];
int n;
ll dp[N][2];
bool check(char c){
    if(c=='a'||c=='o'||c=='e'||c=='i'||c=='u'||c=='y') return 1;
    return 0;
}
int main(){
	int cas=0;
	int t;
	cin>>t;
	while(t--){
		scanf("%s",s+1);
		n=strlen(s+1);
		dp[0][0]=dp[0][1]=1;/*第0个字母为元音 &nbs***bsp; 为辅音的方案数都为  0 */
		for(int i=1;i<=n;i++){
			if(s[i]=='?'){
				dp[i][0]=6*dp[i-1][1];
				dp[i][1]=20*dp[i-1][0];
			}else{
				dp[i][0]=dp[i][1]=0;
				if(check(s[i])){
					dp[i][0]=dp[i-1][1];
				}else{
					dp[i][1]=dp[i-1][0];
				}
			}
		}
		printf("String #%d: ",++cas);
        printf("%lld\n",dp[n][0]+dp[n][1]);/*“代表最后一个字母*/ 
        cout<<endl;
	}
	return 0;
}

G. Towers of Hanoi Grid

这一题其实是比较简单的,只要你画个图模拟一遍过程就很容易找到规律
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<vector>
#define ll long long
using namespace std;
ll read(){
    ll x=0,w=1;
    char ch=0;
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return w*x;
}//快读算法
bool IsPrimeNumber(int n){//判断该数是不是素数
    if (n==2){
        return true;
    }
    if (n%2==0||n==1){
        return false;
    }
    int sqrtn=(int)sqrt((double)n);
    bool flag=true;
    for (int i=3;i<=sqrtn;i+=2){
        if (n%i==0){
            flag=false;
        }
    }
    return flag;
}//快速判断某个数是不是素数的算法
//==================================
const int maxn=1e5+7;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
const int EPS=1e-6;
ll binarymod(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1)
        res=(res*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return res;
}
//利用二进制来算a的b次方的模板
//===================================
//=========================
int g;
int d,n;
ll solve(){
    if(d>(n-1)*(n-1)+1){/*这种情况是肯定不行的*/
        return -1;
    }else{

        return d*(n-1+n-1);
    }
}
int main(){
    cin>>g;//样例的数量
    int num=1;
    while(g--){
        cin>>d>>n;
        ll ans=solve();
        if(ans==-1){
            cout<< "Grid #"<<num<< ": "<< "impossible"<<endl;
        }else{
            cout<< "Grid #"<<num<< ": "<<ans<<endl;
        }
        cout<<endl;
        num++;
    }
    return 0;
}