T1 小 X 的加法難題

解題思路
無腦題目,字串輸入去空格,判斷一下就好了,
code
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
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見祖宗
T2 小 X 的密碼破譯

解題思路
照著做就好了,桶拍,bool
code
#include<iostream>
#include<cstdio>
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的悲哀”
T3 小 X 的液體混合

解題思路
我們可以把這張圖想象成一個個集合,只有當這個集合中有點在容器中的時候才能產生反應,而且每個點只能倒一次,我們可以用dfs便利這張圖,然后高精度就OK,
code
#include<iostream>
#include<cstdio>
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的
T4 小 X 的 AK 計劃

解題思路
這道題…是用貪心的演算法,然后先這樣,再那樣就好了…(我絕對不是借鑒他人程式的)
上面什么都沒發生,下面正文:
首先讀入資料,處理一下從上一個機房走到本地點的路程(等會要用),然后按照當前地點到家的距離排序,
接下來就是求解部分:
首先,建立一個大根堆,然后遍歷排好序的資料,要是這個房間能 AK ,那就 AK 了再走唄,要是這個機房時間不夠了,就從原來那里找一個時間最大的,運用奧義·返還時間,把時間拿回來給這個機房AK,在這個程序中,要不斷取\maxmax,
在決策程序中,要是出現就算怎么反還時間也不夠的話,說明后面的你壓根就 AK 不了,所以明智的結束裝B回圈,
code
#include<bits/stdc++.h>
#define pi pair<long long,long long>
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;
}
比賽是敲了個暴力,下來后發現這真的不是個東西,至于后面…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/179653.html
標籤:AI
