- 吴易繁 的博客
八月(暑期集训)week2 DAY(0)1
- @ 2024-8-12 19:36:05
A. 糖果
题目类型:数学
思路
对于这道题目我们首先可以想到从到遍历,来得到最大的余数。但是,因为到最大有的差,所以会超时。那我们就要换一种办法了。经过观察后,我们发现其实答案只有两种:
-
-
%
所以公式就是:
%%
代码
#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;
cout<<min(l+(n-1-l%n),r)%n;
return 0;
}
这道题目在考试的时候我写的代码漏掉了一个情况,所以只得了90分,下一次一定要再细心一点。
C. 网络
题目类型:模拟
思路
其实这道题目就是一个大模拟,分情况讨论即可,分类如下:
- 在
Server状态下: - 若合法,输出字符串
OK。 - 若合法,但先前有相同的字符串,输出字符串
FAIL。 - 若不合法,输出字符串
ERR。 - 在
Client状态下: - 若合法且有相匹配的连接时,输出一个正整数表示连接到的编号。
- 若合法但没有相匹配的连接时,输出字符串
FAIL。 - 若不合法,输出字符串
ERR。
判断合法的条件:
- 必须形如
a.b.c.d:e的格式, - 。
- 均不能含有多余的前导。
代码
#include<bits/stdc++.h>
using namespace std;
unordered_map<string,int> mp;
bool check(string s){
vector<int> c(5,-1);
sscanf(s.c_str(),"%d.%d.%d.%d:%d",&c[0],&c[1],&c[2],&c[3],&c[4]);
for(int i=0;i<=4;i++){
if(c[i]<0) return 1;
if(i<=3) if(c[i]>255) return 1;
if(i==4) if(c[i]>65535) return 1;
}
char h[100];
sprintf(h,"%d.%d.%d.%d:%d",c[0],c[1],c[2],c[3],c[4]);
return h!=s;
}
int main(){
freopen("net.in","r",stdin);
freopen("net.out","w",stdout);
int n;
cin>>n;
for(int i=1;i<=n;i++){
string a,b;
cin>>a>>b;
if(check(b)) cout<<"ERR"<<endl;
else if(a=="Server"){
if(mp[b]) cout<<"FAIL"<<endl;
else{
cout<<"OK"<<endl;
mp[b]=i;
}
}
else if(a=="Client"){
if(!mp[b]) cout<<"FAIL"<<endl;
else{
cout<<mp[b]<<endl;
}
}
}
return 0;
}
对于这道题目在考试的时候代码是写了,但没过样例,所以没交,下次一定要提升代码能力。