题目列表
分糖果
分类讨论。
讨论一下三种情况。
不细说了,很简单,送分。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("candy.in","r",stdin);
freopen("candy.out","w",stdout);
int n,l,r;
cin>>n>>l>>r;
if(l%n<=r%n)
{
if(r-l<n)
{
cout<<r%n<<endl;
}
else
{
cout<<n-1<<endl;
}
}
else
{
cout<<n-1<<endl;
}
return 0;
}
插入排序
暴力想法(大约 $70\ pts$)
对于每次操作,去找一遍大小关系 $\mathcal O(n)$ 得到位置。
满分想法($100\ pts$)
考虑到 $1$ 操作很少,只有 $5000$,那么对每个一操作,$\mathcal O(n)$ 修改数字的位置。数字位置只要看和当前要更改的数字比一下,加一减一即可。
代码
#include<bits/stdc++.h>
using namespace std;
int a[8020];
int b[8020];
int main()
{
freopen("sort.in","r",stdin);
freopen("sort.out","w",stdout);
int n,q;
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++)
{
b[i]=1;
for(int j=1;j<i;j++)
{
if(a[j]<=a[i])b[i]++;
}
for(int j=i+1;j<=n;j++)
{
if(a[j]<a[i])b[i]++;
}
}
while(q--)
{
int op;
scanf("%d",&op);
if(op==1)
{
int x,v;
scanf("%d%d",&x,&v);
for(int i=1;i<x;i++)
{
if(a[i]<=a[x]&&v<a[i])
{
b[i]++;
b[x]--;
}
if(a[i]>a[x]&&v>=a[i])
{
b[i]--;
b[x]++;
}
}
for(int i=x+1;i<=n;i++)
{
if(a[i]<a[x]&&v<=a[i])
{
b[i]++;
b[x]--;
}
if(a[i]>=a[x]&&v>a[i])
{
b[i]--;
b[x]++;
}
}
a[x]=v;
}
else if(op==2)
{
int x,ans=1;
scanf("%d",&x);
printf("%d\n",b[x]);
}
}
return 0;
}
网络连接
模拟题。
按题意先处理字符串即可。
处理之后判断是否合法。
合法再分两种情况:
-
服务机
-
有同 ip 的服务机了
FAIL
-
没有
OK
,并且自己占位置。
-
-
客户机
-
没有同 ip 的服务机
FAIL
-
有
输出服务机编号。
-
之后,我们只需要考虑怎么把字符串类型映射到一个数字(服务机编号)上。
诶,map 的翻译就叫映射。
你,懂了吗?
不懂评论或百度,谢谢
再说几个细节:
- 特判前导零
- 单独的零不算前导零
- 可能 ip 地址分割数字的字符不一定是按
. . . . :
排。
代码
#include<bits/stdc++.h>
using namespace std;
int s_to_i(string s)
{
int ret=0;
for(int i=0;i<s.size();i++)
{
ret=ret*10+(s[i]-'0');
}
return ret;
}
bool all_digit(string s)
{
bool ret=1;
for(int i=0;i<s.size();i++)
{
if(!isdigit(s[i]))ret=0;
}
return ret;
}
bool check(string s)
{
int i=0;
string a,b,c,d,e;
a=b=c=d=e="";
for(;i<s.size();i++)
{
if(s[i]=='.')
{
i++;
break;
}
a+=s[i];
}
for(;i<s.size();i++)
{
if(s[i]=='.')
{
i++;
break;
}
b+=s[i];
}
for(;i<s.size();i++)
{
if(s[i]=='.')
{
i++;
break;
}
c+=s[i];
}
for(;i<s.size();i++)
{
if(s[i]==':')
{
i++;
break;
}
d+=s[i];
}
for(;i<s.size();i++)
{
e+=s[i];
}
if(a!=""&&b!=""&&c!=""&&d!=""&&e!="")
{
if(a[0]=='0'&&a!="0"||b[0]=='0'&&b!="0"||c[0]=='0'&&c!="0"||d[0]=='0'&&d!="0"||e[0]=='0'&&e!="0")return 0;
if(all_digit(a)&&all_digit(b)&&all_digit(c)&&all_digit(d)&&all_digit(e))
{
if(a.size()<=3&&b.size()<=3&&c.size()<=3&&d.size()<=3&&e.size()<=5)
{
int aa=s_to_i(a),bb=s_to_i(b),cc=s_to_i(c),dd=s_to_i(d),ee=s_to_i(e);
if(0<=aa&&aa<=255 && 0<=bb&&bb<=255 && 0<=cc&&cc<=255 && 0<=dd&&dd<=255 && 0<=ee&&ee<=65535)
{
return 1;
}
else return 0;
}
else return 0;
}
else return 0;
}
return 0;
}
map<string,int>m;
int main()
{
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
int n;
cin>>n;
string s,t;
for(int i=1;i<=n;i++)
{
cin>>s>>t;
if(!check(t))
{
puts("ERR");
continue;
}
if(s=="Server")
{
if(m[t]!=0)
{
puts("FAIL");
}
else
{
m[t]=i;
puts("OK");
}
}
else if(s=="Client")
{
if(m[t]==0)
{
puts("FAIL");
}
else
{
cout<<m[t]<<endl;
}
}
}
return 0;
}
小熊的果篮
先咕着
代码
害嗨嗨