无脑题目,字符串输入去空格,判断一下就好了。
#include
#include
#include
#include
using namespace std;
long long a,b,ans,n;
string h;
long long input()
{
long long i=0,la,lb;
while(h[i]!='+')
{
if(h[i]>='0'&&h[i]<='9')
{
a*=10;
a+=h[i]-'0';
la++;
if(la==9)
{
cout<<"Large"<<endl;
return -1;
}
}
i++;
}
i++;
while(i<n)
{
if(h[i]>='0'&&h[i]<='9')
{
b*=10;
b+=h[i]-'0';
lb++;
if(lb==9)
{
cout<<"Large"<<endl;
return -1;
}
}
i++;
}
return a+b;
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
getline(cin,h);
n=h.size();
ans=input();
if(ans==-1)
return 0;
if(ans>100000000)
cout<<"Large"<<endl;
else
cout<<ans<<endl;
}
不开long long见祖宗
照着做就好了,桶拍,bool
#include
#include
using namespace std;
long long n,a,b,c,ans,tot=1;
bool e[20000000];
int main()
{
freopen("password.in","r",stdin);
freopen("password.out","w",stdout);
cin>>n>>a>>b>>c;
for(int i=1;i<=n;i++)
{
long long t=(a*i*i+b*i+c)%11111111;
e[t]=1;
}
for(int i=0;i<=11111111;i++)
if(e[i])
{
ans=(ans+i*tot)%11111111;
tot++;
}
cout<<ans<<endl;
}
“从零开始的循环” and “没开long long的悲哀”
我们可以把这张图想象成一个个集合,只有当这个集合中有点在容器中的时候才能产生反应,而且每个点只能倒一次。我们可以用dfs便利这张图,然后高精度就OK。
#include
#include
using namespace std;
int n,m,b[1010];
int tot,hd[1010];
int h[1000],len=1;
struct abc{
int to,next;
}s[1000001];
void add(int x,int y)
{
s[++tot]=(abc){
y,hd[x]};
hd[x]=tot;
s[++tot]=(abc){
x,hd[y]};
hd[y]=tot;
}
void mi2()
{
int x=0;
for(int i=1;i<=len+1;i++)
{
h[i]=h[i]*2+x;
x=h[i]/10;
h[i]%=10;
}
if(h[len+1])
len++;
}
void dfs(int now)
{
b[now]=1;
for(int i=hd[now];i;i=s[i].next)
if(!b[s[i].to])
{
dfs(s[i].to);
mi2();
}
}
int main()
{
freopen("mixture.in","r",stdin);
freopen("mixture.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
}
h[1]=1;
for(int i=1;i<=n;i++)
if(!b[i])
dfs(i);
for(int i=len;i>=1;i--)
cout<<h[i];
cout<<endl;
return 0;
}
一遍过,没什么好B的
这道题…是用贪心的算法,然后先这样,再那样就好了…(我绝对不是借鉴他人程序的)
上面什么都没发生,下面正文:
首先读入数据,处理一下从上一个机房走到本地点的路程(等会要用),然后按照当前地点到家的距离排序。
接下来就是求解部分:
首先,建立一个大根堆。然后遍历排好序的数据,要是这个房间能 AK ,那就 AK 了再走呗。要是这个机房时间不够了,就从原来那里找一个时间最大的,运用奥义·返还时间,把时间拿回来给这个机房AK。在这个过程中,要不断取 max \max max 。
在决策过程中,要是出现就算怎么反还时间也不够的话,说明后面的你压根就 AK 不了,所以明智的结束装B循环。
#include
#define pi pair
using namespace std;
long long n,m;
long long now,s,ans;
pi a[100010];
priority_queue<pi> q;
int main()
{
freopen("plan.in","r",stdin);
freopen("plan.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
long long x,y;
scanf("%lld%lld",&x,&y);
a[i]=make_pair(x,y);
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
now+=a[i].first-a[i-1].first;
q.push(make_pair(a[i].second,a[i].first));
s++;
now+=a[i].second;
while(now>m&&q.size())
{
s--;
now-=q.top().first;
q.pop();
}
if(now>m)
break;
ans=max(ans,s);
}
cout<<ans<<endl;
}
比赛是敲了个暴力,下来后发现这真的不是个东西。至于后面…