20分
#include<iostream>
#include<vector>
#include<map>
using namespace std;
const int N = 2010;
int n, m,g;
int space[1010];
void work()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> space[i];//记录计算节点所在的可用区
}
cin >> g;
int cnt = 1;
int j = 0;
for(int i=1;i<=g;i++)
{
int f, a, na, pa, paa, paar;
cin >> f >> a >> na >> pa >> paa >> paar;
for (j = 1; j <= f; j++)
{
cout << cnt<<" ";
cnt++;
if (cnt == n + 1)cnt = 1;
}
cout << endl;
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
work();
return 0;
}
50分
#include<iostream>
#include<vector>
#include<map>
using namespace std;
const int N = 2010;
int n, m,g;
int space[1010];
int number[1010];//节点目前存储的任务数量
map<int, vector<int>> s;
void find(int f)//在无要求的情况下选择任务数量最少的节点
{
int t = -1;
while (f--)
{
int min_num = 0x3f3f3f3f;
t = -1;
for (int i = 1; i <= n; i++)
{
if (t == -1 || number[i] < min_num)
{
t = i;
min_num = number[t];
}
}
number[t]++;//任务数量加一
cout << t << " ";
}
cout << endl;
//return t;//返回选择的计算节点
}
void work()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> space[i];//记录计算节点所在的可用区 要在编号为na的可用区的计算节点上
s[space[i]].emplace_back(i);//往可用区塞入计算节点。必定满足编号从小到大,但任务数量不一定
}
cin >> g;
for (int i = 1; i <= g; i++)
{
int f, a, na, pa, paa, paar;
cin >> f >> a >> na >> pa >> paa >> paar;
if (na == 0)
{
find(f);
}
else
{
auto it = s.find(na);
if (it == s.end())
{
while (f--)cout << 0 << " ";
cout << endl;
}
else
{
auto& v = s[na];
while (f--)
{
int min_num = 0x3f3f3f3f;
int t = -1;
for (int j = 0; j < v.size(); j++)
{
if (t == -1 || number[v[j]] < min_num)
{
t = j;
min_num = number[v[t]];
}
}
number[v[t]]++;
cout << v[t] << " ";
}
cout << endl;
}
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
work();
return 0;
}
80分! 我觉得考试做到这个程度差不多了
#include<iostream>
#include<vector>
#include<map>
using namespace std;
const int N = 2010;
int n, m,g;
int space[1010];
int number[1010];//节点目前存储的任务数量
vector<int> node[1010];//对每个节点存储的编号
map<int, vector<int>> s;
bool check(int x, int paa)
{
for (int i = 0; i < node[x].size(); i++)
{
if (node[x][i] == paa)return false;
}
return true;
}
void find(int f,int a)//在无要求的情况下选择任务数量最少的节点
{
int t = -1;
while (f--)
{
int min_num = 0x3f3f3f3f;
t = -1;
for (int i = 1; i <= n; i++)
{
if (t == -1 || number[i] < min_num)
{
t = i;
min_num = number[t];
}
}
number[t]++;//任务数量加一
node[t].emplace_back(a);
cout << t << " ";
}
cout << endl;
//return t;//返回选择的计算节点
}
void find(int f,int paa,int a,int paar)//在无要求的情况下选择任务数量最少的节点 且非亲和
{
if (paar == 1)
{
int t = -1;
while (f--)
{
int min_num = 0x3f3f3f3f;
t = -1;
for (int i = 1; i <= n; i++)
{
if (t == -1 || (number[i] < min_num))
{
if (check(i, paa))
{
t = i;
min_num = number[t];
}
}
}
if (t == -1)
{
cout << 0 << " ";
}
else
{
number[t]++;//任务数量加一
node[t].emplace_back(a);
cout << t << " ";
}
}
cout << endl;
//return t;//返回选择的计算节点
}
else
{
int t = -1;
while (f--)
{
int min_num = 0x3f3f3f3f;
t = -1;
for (int i = 1; i <= n; i++)
{
if (t == -1 || (number[i] < min_num))
{
if (check(i, paa))
{
t = i;
min_num = number[t];
}
}
}
if (t == -1)
{
min_num = 0x3f3f3f3f;
t = -1;
for (int i = 1; i <= n; i++)
{
if (t == -1 || number[i] < min_num)
{
t = i;
min_num = number[t];
}
}
number[t]++;//任务数量加一
node[t].emplace_back(a);
cout << t << " ";
}
else
{
number[t]++;//任务数量加一
node[t].emplace_back(a);
cout << t << " ";
}
}
cout << endl;
//return t;//返回选择的计算节点
}
}
void work()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> space[i];//记录计算节点所在的可用区 要在编号为na的可用区的计算节点上
s[space[i]].emplace_back(i);//往可用区塞入计算节点。必定满足编号从小到大,但任务数量不一定
}
cin >> g;
for (int i = 1; i <= g; i++)
{
int f, a, na, pa, paa, paar;
cin >> f >> a >> na >> pa >> paa >> paar;
if (na == 0)
{
if (paa == 0) find(f,a);
else find(f, paa,a,paar);
}
else
{
auto it = s.find(na);
if (it == s.end())
{
while (f--)cout << 0 << " ";
cout << endl;
}
else
{
if (paa == 0)
{
auto& v = s[na];
while (f--)
{
int min_num = 0x3f3f3f3f;
int t = -1;
for (int j = 0; j < v.size(); j++)
{
if (t == -1 || number[v[j]] < min_num)
{
t = j;
min_num = number[v[t]];
}
}
number[v[t]]++;
node[v[t]].emplace_back(a);
cout << v[t] << " ";
}
cout << endl;
}
else
{
auto& v = s[na];
while (f--)
{
int min_num = 0x3f3f3f3f;
int t = -1;
for (int j = 0; j < v.size(); j++)
{
if (t == -1 || (number[v[j]] < min_num))
{
if (check(v[j], paa))
{
t = j;
min_num = number[v[t]];
}
}
}
if (t == -1)
{
if(paar==1)cout << 0 << " ";
else
{
min_num = 0x3f3f3f3f;
t = -1;
for (int j = 0; j < v.size(); j++)
{
if (t == -1 || number[v[j]] < min_num)
{
t = j;
min_num = number[v[t]];
}
}
number[v[t]]++;
node[v[t]].emplace_back(a);
cout << v[t] << " ";
}
}
else
{
number[v[t]]++;
node[v[t]].emplace_back(a);
cout << v[t] << " ";
}
}
cout << endl;
}
}
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
work();
return 0;
}
燃尽了 写不动了 其实这题确实回过头来看不难。但一开始的时候一定要有一个整体框架。下面附上题解 在acwing看了别人的做法 确实想法更好,用set存也更正确,因为可以去重
#include<iostream>
#include<set>
#include<vector>
using namespace std;
const int INF = 1e9;
int n, m;
int cnt[10010], l[10010];
set<int> ss[10010];//可用区i里的节点
set<int> s[10010];//节点i里的任务
int find(int na, int paa, int pa)//可用区、反亲和性、亲和性
{
int Min = INF;
int ans = 0;
for (int i = 1; i <= n; i++)
{
if (cnt[i] < Min && (l[i] == na || na == 0) && (s[i].find(paa) == s[i].end() || paa == 0))//判断可用区和反亲和
{
//判断亲和
int p = l[i];
int ok = 0;
for (auto t : ss[p])
if (s[t].find(pa) != s[t].end())ok = 1;
if (ok || pa == 0)
{
Min = cnt[i];
ans = i;
}
}
}
cnt[ans] ++;
return ans;
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> l[i], ss[l[i]].insert(i);
int g;
cin >> g;
for (int i = 1; i <= g; i++)
{
int f, a, na, pa, paa, paar;
cin >> f >> a >> na >> pa >> paa >> paar;
vector<int> ans;
while (f--)
{
int x = find(na, paa, pa);
if (x == 0 && paar == 0)//如果没有,看一下是不是必须满足,直接把反亲和传0就可以
x = find(na, 0, pa);
s[x].insert(a);
ans.push_back(x);
}
for (int j = 0; j < ans.size(); j++) cout << ans[j] << " ";
cout << endl;
}
return 0;
}
附上一张骗分之旅
40分做法 注意转换状态
#include<iostream>
#include<vector>
#include<set>
#include<string>
using namespace std;
int w, s;
string str;
int num[1860], cnt=1;//从1开始记录
int dat[1000],idx;
int state;
bool upp(char c)
{
if ('A' <= c && c <= 'Z')return true;
return false;
}
bool lowe(char c)
{
if ('a' <= c && c <= 'z')return true;
return false;
}
void work()
{
cin >> w >> s;
cin >> str;
state = 0;//默认是大写模式
for (int i = 0; i < str.size(); i++)
{
if (isdigit(str[i]))
{
if (state == 2)
{
num[cnt++] = stoi(str.substr(i, 1));//转换为数字
}
else
{
num[cnt++] = 28;//大小写都通过28转换为数字模式
num[cnt++] = stoi(str.substr(i, 1));
state = 2;
}
}
else if (upp(str[i]))
{
if (state == 2)
{
num[cnt++] = 28;
num[cnt++] = str[i] - 'A';
state = 0;
}
else if (state == 1)
{
num[cnt++] = 28;
num[cnt++] = 28;
num[cnt++] = str[i] - 'A';
state = 0;
}
else
{
num[cnt++] = str[i] - 'A';
}
}
else
{
if (state == 0 || state == 2)
{
num[cnt++] = 27;
num[cnt++] = str[i] - 'a';
state = 1;
}
else
{
num[cnt++] = str[i] - 'a';
}
}
}
if (cnt % 2 == 0)//如果是奇数
{
num[cnt++] = 29;
}
for (int i = 1; i < cnt; i=i+2)
{
dat[++idx] = num[i] * 30 + num[i + 1];
}
if (s == -1)
{
int t = idx;
while((t + 1) % w != 0)
{
t++;
}
for (int i = idx + 1; i <= t; i++)
{
dat[i] = 900;
}
idx = t;
dat[0] = idx + 1;
for (int i = 0; i <= idx; i++)cout << dat[i] << endl;
//cout << num[cnt - 2];
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
work();
return 0;
}
5555~太菜了 再当一次cv狗。感觉这道题加深了我对于多项式的了解,以及如何造出来多项式,可以多看看 来自acwing题解
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e5;
int st = 0;// st 用来表示此时的模式,初始模式为大写模式
//我们用0来代表大写模式 1代表小写模式 2代表数字模式
int check;//校验码的个数
// q 根据 s 映射到 校验码的个数
int q[] = {0,2, 4, 8, 16, 32, 64, 128, 256, 512, 1024};
vector<int> ma,mazi;
int mod = 929;
int g[N],d[N];
vector<int> g1,kd;
void trans_state(int new_st)//状态转换函数
{
if(st == new_st)return;//如果要转换的状态和原来一样,则不需要转换
if(new_st == 0)
{
//切入大写模式28切入
ma.push_back(28);
if(st == 1)ma.push_back(28);// 如果原来的模式为小写模式,需要再用28切入
}
else if(new_st == 1)
{
//切入小写模式 需要用27切入
ma.push_back(27);
}
else if(new_st == 2)
{
//切入数字模式 需要用28切入
ma.push_back(28);
}
//更新模式 这一点千万别忘了
st = new_st;
}
void get_g() //得到多项式g 长度为 check+1项
{
g[0] = 1;
int r = -3;//常数
for(int i = 1; i <= check;r = (3*r)%mod, i ++)
{
for(int j = i; j >= 1; j --)
{
g[j] = (g[j]*r + g[j-1]) % mod;// 核心代码 建议自己模拟
}
g[0] = g[0] * r % mod;
}// 每个元素的下标就是x的次数 举个例子
// 对于 x^3 + x^2 - 1
//下标 0 1 2 3
//g -1 0 2 3
// 可以看成是倒着存放的
for(int i = 0; i <= check; i ++)// g1 : vector<int> 用来存放多项式g
{
g1.push_back(g[i]);
}
}
void get_kd()//得到多项式x^k * d(x) 长度为 k + mazi.size()
{
for(int i = mazi.size()-1, j = 0; i >= 0; i --,j ++)// 这里存放的方式和g多项式一样
{
d[j+check] = mazi[i];
}
for(int i = 0; i < check + mazi.size(); i ++)// kd : vector<int>
{
kd.push_back(d[i]);
}
//cout << endl;
}
int main()
{
int w, s;
cin >> w >> s;
string a;
cin >> a;
//先得到全部的码字
for(int i = 0; i < a.size(); i ++)
{
if(a[i] >= 'A' && a[i] <= 'Z')
{
trans_state(0);
ma.push_back(a[i]-'A');
}
else if(a[i] >= 'a' && a[i] <= 'z')
{
trans_state(1);
ma.push_back(a[i]-'a');
}
else
{
trans_state(2);
ma.push_back(a[i]-'0');
}
}
//如果 只有奇数个数字,需要在末尾补充 29
if(ma.size() % 2 == 1)ma.push_back(29);
//将它们两两成组:30×H+L 得到码字
for(int i = 0; i < ma.size(); i += 2)
{
mazi.push_back(30 * ma[i] + ma[i+1]);
}
//计算 全部数据码字
check = q[s+1];
int all = 1 + mazi.size() + check;//长度码字 有效数据码字 校验码字
// 先计算填充码字
int pad;//填充码字的的个数
if(all % w == 0)pad = 0;
else pad = w - all % w;
//900 是被当做填充码字的
for(int i = 0; i < pad; i ++)mazi.push_back(900);
int n = 1 + mazi.size();// n 表示数据码字的个数
mazi.insert(mazi.begin(),n);// 将 n 插入到mazi 中
for(int i = 0; i < mazi.size(); i ++)
{
cout << mazi[i] << endl;
}//写到这里我们就能得到40分了
if(s != -1)
{
//接下来 计算校验码
get_kd();// 得到 x^k * d(x) 核心函数
get_g();// 得到多项式g 核心函数
// kd / g1 求余
for(int i = kd.size()-1; i >= 0; i --)// 这个求余的过程也是核心代码
{
int t = kd[i] / g1.back();
int deta = i - g1.size() + 1;
for(int j = g1.size()-1; j >= 0 && deta >= 0; j --)
{
kd[j + deta] -= (t * g1[j])%mod;// 需要注意取模
}
}
//到这里 kd 中的各项 就是我们所求的 余数
//cout << "r ";
for(int i = check-1; i >= 0; i --) {
cout << (-kd[i] % mod + mod) % mod << endl;// 题目中 多项式 r(x) 中 x 的 i 次项系数对 929 取模后(取正值)的数字即为校验码字 ci。
// 此处需要加上负号 原因如下
// 这里简写一下原来的式子 kd = q * g - r
// 我们求出来的余数是t kd = q * g + t
// 则 r = -t
}
}
return 0;
}
脉冲神经网路 考到这种题就走大运啦,直接错错错! 但这题还是很值得学习的。首先用了滚动数组的想法,因为只能用二维数组来表示不同时间的t值,所以可以模上最大的延误时间+1
但是很奇怪 照着y总代码抄了一遍但也是错的,但无伤大雅,现在就拿大模拟当练阅读能力和码力了。代码如下,依旧找了个题解cv
//
// Created by 刘宇韬 on 2022/2/25.
//
#include "bits/stdc++.h"
using namespace std;
typedef long long LL;
//1000个脉冲源+1000个神经源
const int N = 2005,INF = 0x3f3f3f3f;
//表示一共有 N 个神经元,S 个突触和 P 个脉冲源,输出时间刻 T
int n,s,p,T;
//一个正实数 Δt,表示时间间隔
double dt;
int h[N],e[N],D[N],ne[N],idx;
double w[N],v[N],u[N],a[N],b[N],c[N],d[N];
int r[N];
//存整个过程中神经元发脉冲的次数
int cnt[N];
//存某时刻某个神经元的内部参数
double I[1024][N/2];
static unsigned long _next = 1;
/* RAND_MAX assumed to be 32767 */
//这里要吧所给函数的next换一个变量名
int myrand(void) {
_next = _next * 1103515245 + 12345;
return((unsigned)(_next /65536) % 32768);
}
void add(int aa,int bb,double cc,int dd){
e[idx] = bb;
w[idx] = cc;
D[idx] = dd;
ne[idx] = h[aa];
h[aa] = idx++;
}
int main(){
scanf("%d%d%d%d", &n, &s, &p, &T);
scanf("%lf", &dt);
memset(h,-1,sizeof h);
//保证所有的 RN 加起来等于 N
for(int i = 0; i <n;) {
//每行有以空格分隔的一个正整数 RN 和六个实数 v u a b c d
//rn表示下面要输入rn个神经元
int rn;
scanf("%d", &rn);
double vv,uu,aa,bb,cc,dd;
scanf("%lf%lf%lf%lf%lf%lf", &vv, &uu, &aa, &bb, &cc, &dd);
//按顺序每一行对应 RN 个具有相同初始状态和常量的神经元
for(int j = 0; j <rn; j++,i++) {
v[i] = vv,u[i] = uu,a[i] = aa,b[i] = bb,c[i] = cc,d[i] = dd;
}
}
//输入接下来的 P 行,每行是一个正整数 r,按顺序每一行对应一个脉冲源的 r 参数
for(int i = n; i <=n+p-1; i++) {
cin>>r[i];
}
//循环数组的长度
int mod = 0;
//建图
for(int i = 0; i <s; i++) {
//其中 s 和 t 分别是入结点和出结点的编号;w 和 D 分别表示脉冲强度和传播延迟
int ss,tt,dd;
double ww;
cin>>ss>>tt>>ww>>dd;
add(ss,tt,ww,dd);
mod = max(mod,dd+1);
}
for(int i = 0; i <T; i++) {
//求出在循环数组中映射的坐标
int t = i%mod;
//遍历所有脉冲源
for(int j = n; j <=n+p-1; j++) {
//脉冲源在每个时刻以一定的概率发放一个脉冲
if (r[j]>myrand()){
//计算状态
for(int k = h[j]; ~k ; k = ne[k]) {
int x = e[k];
//更新每个点的Ik,当前这个点会像下一个点隔D[k]时间后发送脉冲
I[(t+D[k])%mod][x] +=w[k];
}
}
}
//枚举所有神经元
for(int j = 0; j <n; j++) {
double vv = v[j],uu = u[j];
//根据公式,跟新状态
v[j] = vv+dt*(0.04*vv*vv+5*vv+140-uu)+I[t][j];
u[j] = uu+dt*a[j] *(b[j] *vv-uu);
//如果满足 vk≥30,神经元会发放一个脉冲
if (v[j]>=30){
for(int k = h[j]; ~k ; k = ne[k]) {
int x = e[k];
//更新每个点的Ik,当前这个点会像下一个点隔D[k]时间后发送脉冲
I[(t+D[k])%mod][x] +=w[k];
}
//统计该点发脉冲的次数
cnt[j]++;
//同时,vk 设为 c 并且 uk 设为 uk+d,其中 c 和 d 也是常量。
v[j] = c[j],u[j]+=d[j];
}
}
//因为是循环数组,所以用完一次一定要记得清空
memset(I[t],0,sizeof I[t]);
}
double maxv = -INF,minv = INF;
int maxc = -INF,minc = INF;
for(int i = 0; i <n; i++) {
minv = min(minv,v[i]);
maxv = max(maxv,v[i]);
minc = min(minc,cnt[i]);
maxc = max(maxc,cnt[i]);
}
printf("%.3lf %.3lf\n", minv, maxv);
cout<<minc<<' '<<maxc<<endl;
}
命令行选项 写不动了 虽然这题很简单,但是我根本不知道选项能有那么多骚操作参数。附上自己的0分但样例通过代码
#include<iostream>
#include<map>
#include<sstream>
using namespace std;
map<char, int> mapp;
//map<char, int> mq;
bool judge(string str)
{
bool flag = true;
for (int i = 0; i < str.size(); i++)
{
if (str[i] <= '9' && str[i] >= '0')continue;
flag = false;
}
return flag;
}
void work()
{
string str;
cin >> str;
for (int i = 0; i < str.size(); i++)
{
if (str[i + 1] == ':')
{
mapp[str[i]] = 1;
i++;
}
else mapp[str[i]] = 0;
}
int n;
cin >> n;
cin.ignore();
for (int i = 1; i <= n; i++)
{
map<char, int>mq;
string st;
getline(cin, st);
stringstream in(st);
string tem;
in >> tem;//第一个不做处理
bool flag = false;
//cout << "Case" << " " << i << ":" << " ";
char now;
while (in >> tem)
{
if (tem[0] == '-' && tem[1] <= 'z' && tem[1] >= 'a')
{
if (mapp.find(tem[1]) == mapp.end())
{
break;
}
if (mapp[tem[1]] == 1)
{
flag = true;//接受参数模式
mq[tem[1]] = 0;
now = tem[1];
}
else
{
//cout << "-" << tem[1] << " ";
mq[tem[1]] = 0;
}
}
else
{
if (flag == 1 && judge(tem))
{
//cout << stoi(tem) << " ";
mq[now] = stoi(tem);
flag = false;
}
else
{
if (flag == true)mq.erase(now);
break;
}
}
}
//cout << endl;
//cout << "Case" << " " << i << ":" << " ";
cout << "Case" << " " << i << ":" << " ";
for (auto v : mq)
{
if (mapp[v.first] == 1)cout << "-" << v.first << " " << v.second << " ";
else
{
cout << "-" << v.first << " ";
}
}
cout << endl;
}
}
int main()
{
work();
return 0;
}
以下是acwing题解代码,明天再努力吧 今天下线了哎
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
unordered_map<char,int> mp;
void work()
{
for(int i=0;i<(int)s.size();i++)
{
if(s[i]==' ') break;
if(s[i]!=':' && s[i+1]==':') mp[s[i]]=2; //有参字符,标记为2
else
if(s[i]!=':')
mp[s[i]]=1; //无参字符,标记为1
}
}
int main()
{
cin>>s;
s=s+' ';
work();
cin>>n;
getchar();
for(int i=1;i<=n;i++)
{
map<char,string> mq; //用map存储每行命令的合法项
getline(cin,s);
stringstream ssin(s); //用字符流处理s
vector<string> str;
while(ssin>>s) str.push_back(s); //将每个字符串加入到str中
for(int j=1;j<str.size();j++) //str[0]为"ls",省略,直接从1开始
{
if(str[j][0]!='-' || str[j][1]<'a' || str[j].size()!=2) break; //对含有'-'的字符串进行判断(无参、有参字符的开头)
char c=str[j][1];
if(mp[c]==1) mq[c]=c;
else if(mp[c]==2 && (j+1)<str.size()) mq[c]=str[j+1],j++; //将有参字符的值赋值为它的下一个元素,j++直接跳过参数
else break; //条件不合法,直接跳出循环
}
cout<<"Case "<<i<<":";
for(auto x:mq)
if(mp[x.first]==1) cout<<" -"<<x.second; //输出无参
else cout<<" -"<<x.first<<" "<<x.second; //输出有参
cout<<endl;
}
return 0;
}
六百六十六 我改出来了 但很丑的代码
#include<iostream>
#include<map>
#include<sstream>
using namespace std;
map<char, int> mapp;
//map<char, int> mq;
bool judge(string str)
{
bool flag = true;
for (int i = 0; i < str.size(); i++)
{
if ((str[i] <= '9' && str[i] >= '0') || str[i] == '-'||(str[i]<='z'&&str[i]>='a'))continue;
flag = false;
}
return flag;
}
void work()
{
string str;
cin >> str;
for (int i = 0; i < str.size(); i++)
{
if (str[i + 1] == ':')
{
mapp[str[i]] = 1;
i++;
}
else mapp[str[i]] = 0;
}
int n;
cin >> n;
cin.ignore();
for (int i = 1; i <= n; i++)
{
map<char, string>mq;
string st;
getline(cin, st);
stringstream in(st);
string tem;
in >> tem;//第一个不做处理
bool flag = false;
//cout << "Case" << " " << i << ":" << " ";
char now;
while (in >> tem)
{
if (tem[0] == '-'&&flag==false)
{
if (flag == false && tem.size() > 2)break;
if (mapp.find(tem[1]) == mapp.end())
{
break;
}
if (mapp[tem[1]] == 1)
{
flag = true;//接受参数模式
if(mq.find(tem[1])==mq.end())
mq[tem[1]] = "A";
now = tem[1];
}
else
{
//cout << "-" << tem[1] << " ";
mq[tem[1]] = tem[1];
}
}
else
{
if (flag == 1 && judge(tem))
{
//cout << stoi(tem) << " ";
mq[now] =tem;
flag = false;
}
else
{
if (flag == true)
{
mq.erase(now), flag = false;
}
break;
}
}
}
if (flag == true&&mq[now]=="A")mq.erase(now);
//cout << endl;
//cout << "Case" << " " << i << ":" << " ";
cout << "Case" << " " << i << ":" << " ";
for (auto v : mq)
{
if (mapp[v.first] == 1)cout << "-" << v.first << " " << v.second << " ";
else
{
cout << "-" << v.first << " ";
}
}
cout << endl;
}
}
int main()
{
work();
return 0;
}