服了,csp什么情况,界面总是出错,还不能正常提交。。。
佛了,被网页搞了快一小时,终于能提交了
201803-1 跳一跳
#include <bits/stdc++.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int n,k;
int a[1005];
int main()
{
int i=0,num=0,sum=0;
cin>>a[i];
while(a[i]){
if(a[i]==2){
if(i>0&&a[i-1]==1) num=2;
else num+=2;
}else{
num=1;
}
sum+=num;
i++;
cin>>a[i];
}
cout<<sum;
return 0;
}
201803-2 碰撞的小球
typedef struct{
int pos;
int v;
}node;
int main()
{
int n,L,t;
node d[105];
int flag[1005];
memset(flag,0,sizeof(flag));
cin>>n>>L>>t;
for(int i=0;i<n;i++){
cin>>d[i].pos;
d[i].v=1;
}
for(int i=0;i<t;i++){
for(int j=0;j<n;j++){
d[j].pos+=d[j].v;
if(d[j].pos==L||d[j].pos==0) d[j].v*=-1;
}
memset(flag,0,sizeof(flag));
for(int k=0;k<n;k++){
for(int x=k+1;x<n;x++){
if(d[k].pos==d[x].pos&&flag[d[k].pos]==0){
d[k].v*=-1;
d[x].v*=-1;
flag[d[k].pos]=1;
}
}
}
}
for(int i=0;i<n;i++){
cout<<d[i].pos<<' ';
}
return 0;
}
201803-3 url映射
第一次提交 50分,仔细看了遍题目,发现< path >时,参数末尾的’/‘被我忽略,加上后再次测验,居然还是50…
有点懵
好的,刚刚又发现 /< int >/和 /< int >,/ < str >/ 和 / < str >, / < path >/ 和 / < path >…都不一样,于是再次修改提交,只有60分啊啊啊.
刚刚看了几篇题解,发现没考虑输入的待匹配url违法情况,于是又添加判断,第四次提交,还是60分…绝望
吐了,刚刚又发现没考虑’0’,结果第五次提交还是60分
我开始怀疑网络问题,于是又交了几遍,还是一样…
老子放弃了,刚刚抄了个题解交上去居然0分,不想搞了,告辞
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <sstream>
using namespace std;
typedef struct{
string r;
vector<string> p;
int pflag;
int end;
}node;
bool legal(string s)
{
for(int i=0;i<s.size();i++)//如果不是合法的 URL地址返回false
if(s[i]!='/'&&s[i]!='.'&&s[i]!='-'&&s[i]!='_'&&!(isalpha(s[i])||isdigit(s[i])))
return false;
return true;
}
int main()
{
int n,m;
cin>>n>>m;
node q[105];
string url,str;
for(int i=0;i<n;i++){
cin>>url>>str;
q[i].r=str;
if(url[url.size()-1]=='/') q[i].end=1;
else q[i].end=0;
replace(url.begin(),url.end(),'/',' ');
istringstream is(url);
string s;
while(is>>s){
q[i].p.push_back(s);
}
}
string line;
vector<string> para;
int xflag;
for(int i=0;i<m;i++){
para.clear();
cin>>line;
if(!legal(line)){
cout<<404<<endl;
continue;
}
if(line[line.size()-1]=='/') xflag=1;//结尾有'/‘
else xflag=0;
replace(line.begin(),line.end(),'/',' ');
int flag,j,out=0;
for(j=0;j<n;j++){//遍历映射规则
para.clear();
flag=1;
istringstream is(line);
string s;
int k=0;
while(is>>s){//进行匹配
if(s=="") continue;
if(k>=q[j].p.size()){
flag=0;
break;
}
if(q[j].p[k][0]!='<'&&s==q[j].p[k]){
k++;
continue;
}
else if(q[j].p[k][0]!='<'&&s!=q[j].p[k]){//不符合
flag=0;
break;
}
if(q[j].p[k]=="<int>"){
int flag2=1;
for(int w=0;w<s.size();w++){
if(s[w]>='0'&&s[w]<='9') continue;
else{
flag2=0;
break;
}
}
if(flag2==0){//不符合
flag=0;
break;
}
string sw;
int v=0;
while(s[v]=='0') v++;
for(int w=v;w<s.size();w++){
sw.push_back(s[w]);
}
if(sw=="") sw="0";
para.push_back(sw);
k++;
}else if(q[j].p[k]=="<str>"){
para.push_back(s);
k++;
}else if(q[j].p[k]=="<path>"){
q[j].pflag=1;
string ss=s;
while(is>>s){
ss+='/';
ss+=s;
}
if(xflag==1&&q[j].end!=1){
ss+='/';
xflag=0;
}
para.push_back(ss);
}
}
if(flag==0) continue;//直接换下一条语句
else if(xflag==q[j].end){
cout<<q[j].r<<' ';
for(int x=0;x<para.size();x++){
cout<<para[x]<<' ';
}
cout<<endl;
out=1;
break;
}
}
if(out==0) cout<<404<<endl;
}
system("pause");
}
20210916 重新写一遍
一点点调试,发现自己好多细节没注意!!!
从60—70分-90分-100分!!!
眼睛都要瞎了…
好吧,代码其实还是有bug的,在acwing上过不了,但是我懒得研究了,CCF测试集水了点…
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <sstream>
using namespace std;
const int N=110;
int n,m;
struct node{
string name;
vector<string> url;
}U[N];
vector<string> para;
vector<string> split(string str){
vector<string> list;
int flag=0;
if(str[str.size()-1]=='/') flag=1;
replace(str.begin(),str.end(),'/',' ');
stringstream s(str);
string ss;
while(s>>ss) list.push_back(ss);
if(flag) list.push_back("/");
return list;
}
bool check(vector<string> u1,vector<string> u2){
if(u1[u1.size()-1]=="/")//规则以'/‘结尾,匹配对象也需以'/'结尾
if(u2[u2.size()-1]!="/") return false;
int i=0,j=0;
for(i=0,j=0;i<u1.size(),j<u2.size();i++){
if(i>=u1.size()||j>=u2.size()) return false;
if(u1[i]=="<str>"){
if(u2[j]=="/") return false;
para.push_back(u2[j]);
j++;
}else if(u1[i]=="<int>"){
string num;
int flag=0;
for(int k=0;k<u2[j].size();k++){
if(u2[j][k]>='0'&&u2[j][k]<='9'){
if(u2[j][k]=='0'&&!flag&&k<u2[j].size()-1) k++;
flag=1;
num.push_back(u2[j][k]);
}else return false;
}
para.push_back(num);
j++;
}else if(u1[i]=="<path>"){//判断path最后有没有'/',没有的话看参数里是否有'/'
string path;
while(j<u2.size()-1){
if(j==u2.size()-2&&u1[u1.size()-1]=="/")
path=path+u2[j++];
else path+=(u2[j++]+'/');
}
if(u2[j]!="/") path=path+u2[j];
para.push_back(path);
return true;
}else{
if(u1[i]!=u2[j++]) return false;
}
}
if(i<=u1.size()-1||j<=u2.size()-1) return false;
return true;
}
int main()
{
cin>>n>>m;
string URL,uname;
int flag=0;
for(int i=0;i<n;i++){
cin>>URL>>uname;
U[i].name=uname;
U[i].url=split(URL);
}
string p;
vector<string> q;
for(int i=0;i<m;i++){
q.clear();
int flag=0;
cin>>p;
q=split(p);
for(int j=0;j<n;j++){
para.clear();
if(check(U[j].url,q)){
flag=1;
cout<<U[j].name<<' ';
for(int k=0;k<para.size();k++) cout<<para[k]<<' ';
cout<<endl;
break;
}
}
if(!flag) cout<<404<<endl;
}
system("pause");
return 0;
}