#define 后面的定义要写在一排。

本文介绍了一个宏定义srelease的具体实现方式,该宏用于在C++中安全地释放COM对象指针,确保对象正确调用Release方法并置空指针。宏定义遵循了一行书写的原则。

#ifndef srelease
#define  srelease(x) if (NULL!=x){x->Release( );x=NULL;}
#endif

#define 后面的定义要写在一排。

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> #include <math.h> #include <ctype.h> #include <limits.h> #define EPS 1e-9 //浮点比较 #define MOD 998244353 //取模运算 #define MAX_LL 1000010//大型数组 #define MAX_L 1010 //小型数组 #define MAX_N 11 //矩阵阶数 #define PI 3.141592653//通用常数 #define EU 2.718281828//通用常数 #define in int #define ll long long #define db double #define ch char #define vd void #define uin unsigned int #define ull unsigned long long #define uch unsigned char #define br break #define cn continue #define rt return #define sc scanf #define pr printf //支持单元输入 #define scin(x) sc("%d", &(x)) #define scll(x) sc("%lld", &(x)) #define scdb(x) sc("%lf", &(x)) //支持空白略去 #define scch(x) sc(" %c", &(x)) #define scst(x) sc(" %s", (x)) //支持二元输入 #define scin2(x,y) sc("%d%d", &(x), &(y)) #define scll2(x,y) sc("%lld%lld", &(x), &(y)) #define scdb2(x,y) sc("%lf%lf", &(x), &(y)) //支持一元输出 #define prin(x) pr("%d", x) #define prll(x) pr("%lld", x) #define prdb(x) pr("%lf", x) #define prch(x) pr("%c", x) #define prst(x) pr("%s", x) //支持一元换行输出 #define prinn(x) pr("%d\n", x) #define prlln(x) pr("%lld\n", x) #define prdbn(x) pr("%lf\n", x) #define prchn(x) pr("%c\n", x) #define prstn(x) pr("%s\n", x) //支持一元精度输出 #define prdbr(x, r) pr("%.*lf", (r), (x)) //支持一元精度换行输出 #define prdbnr(x, r) pr("%.*lf\n", (r), (x)) //支持换行输出 #define prn pr("\n") //支持空格输出 #define prb pr(" ") //支持最值判断 #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) //支持浮点相等判断 #define CEPS(a, b) (fabs((a) - (b)) < EPS) /* C7A: 以行或空格分割单词 P1:每个单词首字母大:toupper(str[0]) P2:将空格替换为换行输出P1后单词 A1:单字符读入法:while(c=getchar()!=EOF),实际为全缓冲区输入后依次执行后续程序 首字符大:标记法:初始化flag=1;大一次后置0,空格和换行符后再置1,且转换行 否则均采用putchar(c)输出 A2:字符串读入法:while(scst(name)!=EOF),实际全部读入缓冲区 scst接受一次空格或换行分割的字符串,执行一次toupper及输出str,缓冲区内再匹配 */ /* C7B 二维数组模拟矩阵,四重循环执行操作 第一二曾循环负责记录元素位置输出矩阵形状(i,j)由题易得ans[][]的边长为m-n+1; P1:全局:x[n][n]卷积;y[m][m]待处理矩阵;ans[][]输出矩阵 P2:函数cnn(in m,in n) 四重循环[0,m-n+1][0,m-n+1]遍历左上卷积元素可达位置 [0,n-1][0,n-1]负责实现卷积核与对应位置计算 观察规律y[][]的偏移[i+k][j+l] P3:输入输出与调用 */ /* C7C A1:动态维护当前字符长度,直接采用指针偏移法获取新字符串 P1:全局s[];全局ans[],全局lans P2:执行n次字符串输入: 循环内scst(s); strcat(ans+lans)(初始0偏移); lans+=strlen(s)(补上新字符长度); P3:tmp中间变量交换ans[p-1]和ans[q-1] A2:双循环模拟strcat scst(s); ls=strlen(s); for(in i=0;i<ls;i++) ans[lans++]=s[i] */ /* C7D Self: P1:对于每组读入的字符串s,首先对于s[0]进行判断 switch-case:s[0]=='c',换用sscanf(s,"%[^[]%d];",temp,&num) P2:总B:char类型为1B单位;all=num*1 P3:调用合法拆分函数 all:if(all>=(1<<30)) { prlln(sz/(1<<30));//GB段有多少 sz%=(1<<30);抹去GB段 } 以此类推 */ /* C7E P1:全部小化由原串s1转为s2;关键字key[] P2:fgets(s1),for循环内全部tolower P3:对于组数n scst(key);in keylen=strlen(key) ch *p=s2; P4:只要p=strstr(p,key)!=NULL,即有该子串 对s1对应位置置* s1[p-s2+i]='*'//p-s2为偏移量 P5:p++;//从下一个字符开始匹配 */ /* C7F */ /* C7G P1:找最小线段 P2:判断每个点与其他点的距离是否为正方体特征可重集 */ /* C7H-skip */ /* C7I */ /* C7J-skip */ /* E7A in len=strlen(s) prstn(s+len-k)可自动尾删k个字符 然而:题解所用的gets已弃用,而fgets最后有换行符 但是:最后一组数据末尾不一定有换行符,避免基于此操作 */ //#include<stdio.h> //#include<string.h> //int main() { // int T, k; // char s[1008]; // scanf("%d", &T); // while (T--) // { // scanf("%d", &k); // fgets(s,sizeof(s),stdin); // if (s[strlen(s) - 1] == '\n') // { // s[strlen(s) - 1] = '\0'; // } // printf("%s\n", s + strlen(s) - k); // } //} /* E7B 以下三种法等价: 1.vd f(ll arr[],in size) 2.vd f(ll*arr,in size) 3.vd f(ll arr[num],in size)//num代任意给定数,会被忽略 对于多为数,以下两种法等价 1.vd f(ll arr[][10]) //此处10有意义,不会被忽略 2.vd f(ll (*arr)[10])//与1中表达等价的数组指针 附二重指针(需要额外传长宽参数) 1.vd f(ll**arr) */ /* E7C */ //in main() //{ // in n; // scin(n); // in x; // in cnt = 0; // for (in i = 0; i < n; i++) // { // scin(x); // uch* p = (uch*)&x; // for (in j = 0; j < 4; j++) // { // pr("%02x",p[j]); // prb; // if (p[j] == 114) // { // cnt++; // } // } // prn; // } // prin(cnt); // rt 0; //} /* E7D */ //ch s[100005]; //in main() //{ // in n; // scin(n); // while (n--) // { // in m, k; // scin2(m, k); // scst(s); // in ans = 0; // for (in i = 0; s[i] != '\0'; i++) // { // ans = (ans * m + s[i] - '0') % k; // } // prinn(ans); // } // rt 0; //} /* E7E */ /* E7G P1:一个计算器函数: vd cal(in 操作数1,in 操作数2,in x,ch c(操作符号)) { 根据c的加减乘除确定对s1[x]=s1[op1]?s1[op2] } ??? */ /* E7H-skip */ /* E7I-skip */ /* E7J-skip */ /* C8B */ typedef in(*cmp_fn)(const vd*, const vd*); vd swap(ll* a, ll* b) { ll temp = *a; *a = *b; *b = temp; } in llcmp_up(const vd* a, const vd* b) {//int升序 ll x = *(const ll*)a; ll y = *(const ll*)b; if (x < y) rt - 1; if (x > y) rt 1; rt 0; } //快速排序(in版)(优化重复;cmp升序版;单元;嵌swap;嵌自定义cmp)[l,r] vd quick_csort_3w(ll arr[], in l, in r, cmp_fn cmp) {//调用时:quick_csort_3w(arr,l,r,incmp_up) if (l >= r) rt; ll pivot = arr[l]; in lt = l; in gt = r; in i = l; while (i <= gt) { in res = cmp(&arr[i], &pivot); if (res < 0) swap(&arr[i++], &arr[lt++]); else if (res > 0) swap(&arr[i], &arr[gt--]); else i++; } quick_csort_3w(arr, l, lt - 1, cmp); quick_csort_3w(arr, gt + 1, r, cmp); } //对排序数组去重(src[0,srcSize-1]存入dest[0,*destSize-1]) vd remove_same(const ll src[], in srcSize, ll dest[], in* destSize) { if (srcSize == 0) { *destSize = 0; rt; } dest[0] = src[0]; in count = 1; for (in i = 1; i < srcSize; ++i) { if (src[i] != src[i - 1]) { dest[count++] = src[i]; } } *destSize = count; } //辅助一维数组输出([0,n))(自动去除换行符号) vd pr_arr1(ll arr[], in n) { for (in i = 0; i < n; i++) { pr("%lld%c ", arr[i], " \n"[i == n - 1]); } } ll arr[1000005]; ll dest[1000005]; in main() { in n; scin(n); for (in i = 0; i < n; i++) { scll(arr[i]); } quick_csort_3w(arr, 0, n - 1, llcmp_up); in s = 1000000; in* size = &s; remove_same(arr, n, dest, size); pr_arr1(dest, *size); }
最新发布
12-04
输入: 第一行,两个整数 row 和 col,分别为表的行数(除去表头)和表的列数,列数在 100 及以内,行数在 1000 及以内; 第二行,col 个用一个空格分隔的VARCHAR 类型字符串(列名),代表表头,列名之间保证各不相同; 第三行,col 个用一个空格分隔的字符串,只可能是 INT,REAL,VARCHAR 或 DATE,代表每一列中数据的类型;接下来 row 行,每行 col 个用一个空格分隔的数据,每个数据遵循所在列的数据类型的构造规则,每一行代表一个元组。 之后若干行为关键字顺序,每行包括一个列名和一个数字,用一个空格分隔。第 i 行的列名代表第 i 关键字,跟在它后面的数字为 1 或 −1,如果是 1 则该关键字按升序排列,−1 则按降序排列。关键字之间不会重复,此部分行数不会超过列数。 输出:输出排好序的表格,第一行是表头,接下来 row 行是相应的元组。每个数据之间用一个空格分隔。请按原样输出数据。 例如测试集 1 的输入是: 5 5 orderID food num buyDate price INT VARCHAR INT DATE REAL 1 apple 5 2020-1-09 34.55 2 banana 10 2020-01-9 129.98 3 juice 1 2019-12-21 10.209 4 apple 3 2020-01-09 32.2 5 apple 2 2020-1-9 20.1 buyDate 1 food -1 price 1 测试集 1 的运行结果为: orderID food num buyDate price 3 juice 1 2019-12-21 10.209 2 banana 10 2020-01-9 129.98 5 apple 2 2020-1-9 20.1 4 apple 3 2020-01-09 32.2 1 apple 5 2020-1-09 34.55 开始你的任务吧,祝你成功! #include <stdio.h> #include <stdlib.h> #include <string.h> #define ROWNUM 1007 #define COLNUM 107 #define LEN 107 #define INT 0 #define REAL 1 #define VARCHAR 2 #define DATE 3 int type[COLNUM], sp[COLNUM][2], row, col, n; char title[COLNUM][LEN]; typedef struct table { union attr { char varchar[LEN]; double real; int date; int intNum; } A; char rawData[LEN]; } T; T t[ROWNUM][COLNUM]; /**********Begin**********/ void readTable() { } void readSP() { } int cmp(const void *a, const void *b) { } void printTable() { } /**********End**********/ int main() { readTable(); readSP(); qsort(t, row, sizeof(*t), cmp); printTable(); return 0; }
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值