打卡信奥刷题(3034)用C++实现信奥题 P6470 [COCI 2008/2009 #6] CUSKIJA

发布时间:2026/5/17 23:52:50

打卡信奥刷题(3034)用C++实现信奥题 P6470 [COCI 2008/2009 #6] CUSKIJA P6470 [COCI 2008/2009 #6] CUSKIJA题目描述给定一个长度为n nn的序列a aa请将其重新排序新序列中任意相邻两个数之和都不能被3 33整除。输入格式第一行有一个整数表示序列的长度n nn。第二行有n nn个整数第i ii个整数表示序列的第i ii个元素a i a_iai​。输出格式本题存在 Special Judge。如果存在解请在第一行输出一行一个字符串Yes并在第二行输出n nn个整数第i ii个整数表示新序列的第i ii个元素。如果无解请只输出一行一个字符串No。输入输出样例 #1输入 #13 1 2 3输出 #1Yes 2 3 1输入输出样例 #2输入 #25 4 6 3 9 8输出 #2Yes 3 4 6 8 9输入输出样例 #3输入 #36 3 7 6 4 2 8输出 #3Yes 3 7 4 6 2 8输入输出样例 #4输入 #43 3 12 9输出 #4No说明/提示数据规模与约定对于全部的测试点保证1 ≤ n ≤ 10 4 1 \leq n \leq 10^41≤n≤1041 ≤ a i ≤ 10 6 1 \leq a_i \leq 10^61≤ai​≤106。【说明】题目译自 COCI2008-2009 CONTEST #6T4 CUSKIJA翻译与 SPJ 均来自 一扶苏一。为了 SPJ 判定方便输出格式较原题略有修改。C实现#includebits/stdc.husingnamespacestd;constintN1e45;intmod[4][N],top[4];intn,x;intmain(){cinn;for(registerinti1;in;i){scanf(%d,x);mod[x%3][top[x%3]]x;}if(top[0]0top[1]!0top[2]!0){puts(No);return0;}elseif(top[1]top[2]1top[0]){puts(No);return0;}puts(Yes);if(top[0]0){for(inti1;itop[1];i)printf(%d ,mod[1][i]);for(inti1;itop[2];i)printf(%d ,mod[2][i]);return0;}for(inti1;itop[1];i){if(top[0]-10)printf(%d ,mod[0][top[0]--]);printf(%d ,mod[1][i]);}printf(%d ,mod[0][top[0]--]);//输出这个数for(inti1;itop[2];i){printf(%d ,mod[2][i]);if(top[0]0)printf(%d ,mod[0][top[0]--]);}return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容

相关新闻