编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#46147 | #1002. B. 说服合伙人 | Compile Error | 0 | 0 ms | 0 K | C / 9.1 K | 旭 | 2020-08-19 20:21:02 |
#define _CAT_SECURE_NO_WARNINGS
#include <stdio.h>
long long int zhizhen1 = 0; //设置指针1
long long int sum = 0; //用以记录已经处理过的牌数
long long int he = 0; //设置cyy的和
long long int str1[100000] = { 0 }, str2[100000] = { 0 }, str3[100000] = { 0 }, str4[100000] = { 0 },
str5[100000] = { 0 }; //全局变量-可在子函数和主函数中应用
void shuru(long long int n); //输入函数
void paixv(long long int n); //排序函数
void shenrupaixv(long long int n); //深入排序函数
void yanzheng(long long int n); //验证函数
void bianma(long long int n); //编码函数
void bianmacsf(long long int n); // csf的编码函数
void paixvcsf(long long int n); // csf的排序函数
void shenrupaixvcsf(long long int n); // csf的深入排序函数
long long int xunzuizhi(long long int n); //用以寻找str1中的最大值
long long int qinglingcsf(long long int n, long long int max); // csf的清零函数
void qushu(long long int n, long long int zhizhen1); //取数函数,用于取出str2中的两个可取数
void case1(long long int zhizhen6, long long int zhizhen8); //情况1处理函数,一大一小牌。
void case2(long long int zhizhen6, long long int zhizhen8); //两张大牌的函数
void case3(long long int zhizhen6, long long int zhizhen8, long long int n,
long long int paishu); //两张小牌的处理函数
void case3(long long int zhizhen6, long long int zhizhen8, long long int n, long long int paishu) {
for (long long int l = zhizhen8; l < n; l++) {
if (str3[l] <= paishu && str2[l] ! = 0) {
he = he + str2[l];
str1[l] = str2[l] = 0;
sum++;
break;
}
}
}
void case2(long long int zhizhen6, long long int zhizhen8) {
if (str2[zhizhen6] > str2[zhizhen8]) {
he = he + str2[zhizhen6];
str1[zhizhen6] = str2[zhizhen6] = 0;
sum++;
} else if (str2[zhizhen6] < str2[zhizhen8]) {
he = he + str2[zhizhen8];
str1[zhizhen8] = str2[zhizhen8] = 0;
sum++;
} else if (str2[zhizhen6] == str2[zhizhen8]) {
if (str1[zhizhen6] >= str1[zhizhen8]) {
he = he + str2[zhizhen6];
str1[zhizhen6] = str2[zhizhen6] = 0;
sum++;
} else {
he = he + str2[zhizhen8];
str1[zhizhen8] = str2[zhizhen8] = 0;
sum++;
}
}
}
void bianmacsf(long long int n) {
for (long long int i = 0; i < n; i++) {
str5[i] = i + 1;
} //用str5对数组1从大到小进行编号
}
void case1(long long int zhizhen6, long long int zhizhen8) {
if (str2[zhizhen6] > str2[zhizhen8]) {
he = he + str2[zhizhen6];
str1[zhizhen6] = str2[zhizhen6] = 0;
sum++;
} else if (str2[zhizhen6] < str2[zhizhen8]) {
he = he + str2[zhizhen8];
str1[zhizhen8] = str2[zhizhen8] = 0;
sum++;
} else if (str2[zhizhen6] == str2[zhizhen8]) {
if (str1[zhizhen6] >= str1[zhizhen8]) {
he = he + str2[zhizhen6];
str1[zhizhen6] = str2[zhizhen6] = 0;
sum++;
} else {
he = he + str2[zhizhen8];
str1[zhizhen8] = str2[zhizhen8] = 0;
sum++;
}
}
}
void qushu(long long int n, long long int zhizhen1) {
long long int j = 0; //用以记录str4的个数
for (long long int k = zhizhen1; k < n; k++) {
if (str2[k] != 0) {
str4[j] = str3[k];
j++;
str4[j] = str5[k];
j++;
if (j >= 4)
break;
}
} //取出str2中的两位
}
long long int qinglingcsf(long long int n, long long int max) {
for (long long int i = 0; i < n; i++) {
if (str1[i] == max) {
str1[i] = str2[i] = 0;
zhizhen1 = i;
sum++;
break;
}
}
return zhizhen1;
}
long long int xunzuizhi(long long int n) {
long long int max = str1[0];
for (long long int i = 1; i <= n; i++) {
if (str1[i] > max) {
max = str1[i];
}
} //用以找到str1中的最大点
return max;
}
void shenrupaixvcsf(long long int n) {
for (long long int i = 0; i < n; i++) {
long long int geshu = 0;
long long int zhizhen;
while (str1[i] == str1[i + 1]) {
geshu = 2;
zhizhen = i;
for (long long int j = i + 1; j < n; j++) {
if (str1[j] == str1[j + 1]) {
geshu++;
} else
break;
}
if (geshu == 2) {
if (str2[i] < str2[i + 1]) {
long long int temp1 = str1[i + 1];
str1[i + 1] = str1[i];
str1[i] = temp1;
long long int temp2 = str2[i + 1];
str2[i + 1] = str2[i];
str2[i] = temp2;
long long int temp3 = str3[i + 1];
str3[i + 1] = str3[i];
str3[i] = temp3;
}
} else if (geshu > 2) {
for (long long int i = zhizhen; i < (zhizhen + geshu); i++) {
for (long long int j = (zhizhen + geshu - 1); j > i; j--) {
if (str1[j] > str1[j - 1]) {
long long int temp1 = str1[j];
str1[j] = str1[j - 1];
str1[j - 1] = temp1;
long long int temp2 = str2[j];
str2[j] = str2[j - 1];
str2[j - 1] = temp2;
long long int temp3 = str3[j];
str3[j] = str3[j - 1];
str3[j - 1] = temp3;
}
}
} //对整体的牌进行的内部的排序
}
i = i + geshu;
}
}
}
void paixvcsf(long long int n) {
for (long long int i = 0; i < n; i++) {
for (long long int j = n - 1; j > i; j--) {
if (str1[j] > str1[j - 1]) {
long long int temp1 = str1[j];
str1[j] = str1[j - 1];
str1[j - 1] = temp1;
long long int temp2 = str2[j];
str2[j] = str2[j - 1];
str2[j - 1] = temp2;
long long int temp3 = str3[j];
str3[j] = str3[j - 1];
str3[j - 1] = temp3;
}
}
} //对csf的牌从大到小进行排序,并联动数组1、2、3进行排序
}
void xiufu(long long int bug); //修复未知电脑bug函数
void xiufu(long long int bug) {
if (bug == 0)
str2[0] = str2[1];
}
void bianma(long long int n) {
for (long long int i = 0; i < n; i++) {
str3[i] = i + 1;
} //用str3对数组二从大到小进行编号
}
void shenrupaixv(long long int n) {
for (long long int i = 0; i < n; i++) {
long long int geshu = 0;
long long int zhizhen;
while (str2[i] == str2[i + 1]) {
geshu = 2;
zhizhen = i;
for (long long int j = i + 1; j < n; j++) {
if (str2[j] == str2[j + 1]) {
geshu++;
} else
break;
}
if (geshu == 2) {
if (str1[i] < str1[i + 1]) {
long long int temp1 = str1[i + 1];
str1[i + 1] = str1[i];
str1[i] = temp1;
long long int temp2 = str2[i + 1];
str2[i + 1] = str2[i];
str2[i] = temp2;
}
} else if (geshu > 2) {
for (long long int k = zhizhen; k < (zhizhen + geshu); k++) {
for (long long int l = (zhizhen + geshu - 1); l > i; l--) {
if (str1[l] > str1[l - 1]) {
long long int temp1 = str1[l];
str1[l] = str1[l - 1];
str1[l - 1] = temp1;
long long int temp2 = str2[l];
str2[l] = str2[l - 1];
str2[l - 1] = temp2;
}
}
} //对整体的牌进行的内部的排序
}
i = i + geshu;
}
}
}
void paixv(long long int n) {
for (long long int i = 0; i < n; i++) {
for (long long int j = n - 1; j > i; j--) {
if (str2[j] > str2[j - 1]) {
long long int temp1 = str1[j];
str1[j] = str1[j - 1];
str1[j - 1] = temp1;
long long int temp2 = str2[j];
str2[j] = str2[j - 1];
str2[j - 1] = temp2;
}
}
} //对cyy的牌从大到小进行排序
}
void yanzheng(long long int n) {
for (long long int i = 0; i < n; i++) {
printf("%lld %lld\n", str1[i], str2[i]);
}
}
void shuru(long long int n) {
for (long long int i = 0; i < n; i++) {
scanf("%lld", &str1[i]);
scanf("%lld", &str2[i]);
} //输入每张牌的a,b点数
}
int main() {
long long int n;
scanf("%lld", &n); //总牌数
long long int paishu = n / 2; //记录cyy要取的总牌数
shuru(n); //使用输入函数
paixv(n); //使用排序函数
shenrupaixv(n); //使用深入排序函数
bianma(n); //使用编码函数
xiufu(str2[0]); //使用修复电脑未知BUG函数
paixvcsf(n); //使用scf的排序函数
shenrupaixvcsf(n); //使用csf的深入排序函数
bianmacsf(n); //使用csf的编码函数
//
while (sum <= n) {
long long int max = xunzuizhi(n); //使用寻最值函数-寻找str1中最大的值
zhizhen1 = qinglingcsf(n, max); //使用csf的清零函数
if (str3[zhizhen1] <= paishu)
paishu++; //可取牌数大小的动态改变
qushu(n, zhizhen1); //使用取数函数
long long int zhizhen6 = str4[0];
long long int zhizhen7 = str4[1] - 1;
long long int zhizhen8 = str4[2];
long long int zhizhen9 = str4[3] - 1; // 6,8记录的是str2的序数;7,9记录的是str1的序数
if ((zhizhen6 <= paishu && zhizhen8 > paishu) || (zhizhen6 > paishu && zhizhen8 <= paishu)) {
case1(zhizhen7, zhizhen9); //使用一大一小牌处理函数
} else if (zhizhen6 <= paishu && zhizhen8 <= paishu) {
case2(zhizhen7, zhizhen9); //使用两个大牌函数
} else if (zhizhen6 > paishu && zhizhen8 > paishu) {
case3(zhizhen7, zhizhen9, n, paishu); //使用两张小牌的处理函数
}
}
printf("%lld\n", he);
return 0;
}
编译信息
/sandbox/1/a.c:30:33: warning: treating Unicode character <U+FF01> as identifier character rather than as '!' symbol [-Wunicode-homoglyph]
if (str3[l] <= paishu&&str2[l]!=0)
^~
/sandbox/1/a.c:30:33: error: expected ')'
/sandbox/1/a.c:30:6: note: to match this '('
if (str3[l] <= paishu&&str2[l]!=0)
^
1 warning and 1 error generated.