解法:排序(什么为什么错了这么多次QAQ??解法就是排序啊)
sort(a,a+3) cout<<a[1]<<endl;
解法:字符串处理(处理字符串中的数字就好了,代码给出)
(当然可以用%d%c来快速处理~)
注意:如果题目是反过来告诉字符串,让你压缩会怎么办?
for(i=0;i<k;i++)
{
if(a[i]>=‘0‘&&a[i]<=‘9‘)
{
c=(a[i]-‘0‘)+c*10;continue;
}
else
{
for(j=1;j<=c;j++)
printf("%c",a[i]);
c=0;
}
}
解法:答案不给出,母函数模板(不懂的去查他的模板,大概就是我下面写的那样,注意取模)
for(int i=0;i<=n;i++)
{
a[i]=1;
b[i]=0;
}
for(int i=2;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
for(int k=0;k+j<=n;k+=i*i)
{
b[k+j]+=a[j];
}
}
for(int z=0;z<=n;z++)
{
a[z] = b[z]%mod;
b[z] = 0;
}
}
cout<<a[n]<<endl;
解法:难度我猜不在于算出概率,算概率只有去判断一下就好了
化简可以用公约数~(暴力求出所有解法也是可以的,如下面的形式)
if(a>=b)
max=a;
else
max=b;
if(max==1)
printf("1/1");
if(max==2)
printf("5/6");
if(max==3)
printf("2/3");
if(max==4)
printf("1/2");
if(max==5)
printf("1/3");
if(max==6)
printf("1/6");
解法:模拟,如果让你求0011000111000 有多少个连续的1,估计题目有容易的多
现在变成二维形式,还是一样的解法
我们加边界,当出现*时,判断左边是否有.,右边时候有*,或者说单独存在这一个*,统计一下
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
string s[105];
int main(){
int n,m;
for(int i=0;i<=105;i++){
s[0]+=‘.‘;
}
while(cin>>n>>m){
for(int i=1;i<=n;i++){
cin>>s[i];
s[i]=‘.‘+s[i]+‘.‘;
}
s[n+1]=s[0];
int cnt1=0,cnt2=0;
for(int i=1;i<=n;i++){
for(int k=1;k<=m;k++){
if(s[i][k]==‘*‘){
if(s[i-1][k]==‘.‘ && s[i+1][k]==‘*‘){
cnt1++;
}
if(s[i][k-1]==‘.‘ && s[i][k+1]==‘*‘){
cnt1++;
}
if(s[i-1][k]==‘.‘ && s[i+1][k]==‘.‘ && s[i][k-1]==‘.‘ && s[i][k+1]==‘.‘){
cnt2++;
}
}
}
}
cout<<cnt2<<" "<<cnt1<<endl;
}
}
解法:参考http://www.cnblogs.com/yinghualuowu/p/5160313.html
解法:时间原因不知道怎么去说明白,先略过吧>~<
解法:一道模拟或者说是LCA。。(防ak题嘛,你懂得)
用map放每一个节点的对应边的权值,然后进行更新或者查询(具体看题目要求)
是不是说的有点简单了。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
map<pair<ll,ll>,ll>m;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
ll ty,u,v,w;
scanf("%I64d",&ty);
if(ty==1)
{
scanf("%I64d%I64d%I64d",&u,&v,&w);
if(v<u)swap(u,v);
while(v!=u)
{
if(v>u)
{
m[{v,v/2}]+=w;
m[{v/2,v}]+=w;
v/=2;
}
else if(u>v)
{
m[{u,u/2}]+=w;
m[{u/2,u}]+=w;
u/=2;
}
}
}
else
{
ll sum=0;
scanf("%I64d%I64d",&u,&v);
if(v<u)swap(u,v);
while(v!=u)
{
if(v>u)
{
sum+=m[{v,v/2}];
v/=2;
}
else if(u>v)
{
sum+=m[{u,u/2}];
u/=2;
}
}
printf("%I64d\n",sum);
}
}
return 0;
}
原文:http://www.cnblogs.com/yinghualuowu/p/6109186.html