以下所有AC题解代码来自“仙客传奇”团队。 AC题数:4/13 CGJK

A. Sockpuppets

B. Sequences Generator

C. Insertion Sort

AC的C++语言程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
ll f(ll a,ll q)
{ll ret=a;while(--a){ret*=a;ret%=q;}ret%=q;return ret;
}
int main()
{ll n,k,q;int T,kase=0;cin>>T;while(T--){cin>>n>>k>>q;if(n<=k+1){cout<<"Case #"<<++kase<<": "<<f(n,q)<<endl;}else{ll num=2*f(k+1,q)%q+f(k,q)%q;num%=q;ll a=2*f(k,q)%q;ll b=3*f(k,q)%q+f(k+1,q);while(n>k+2){num+=b;num%=q;b+=a;b%=q;n--;}cout<<"Case #"<<++kase<<": "<<num<<endl;}}return 0;
}

AC的C++语言程序:

#include <iostream>using namespace std;
typedef long long LL;LL dp[51];int main(void) {int t;LL n, k, q;scanf("%d", &t);for (int v = 1; v <= t; v++) {scanf("%lld%lld%lld", &n, &k, &q);if (k >= n - 1) {LL ans = 1;for (LL i = n; i >= 2; i--)ans = ans * i % q;printf("Case #%d: %lld\n", v, ans % q);continue;}dp[1] = 1;for (LL crse = 1, i = 2; i < 51; i++, crse += 2)dp[i] = (dp[i - 1] + crse) % q;LL ans = 1;if (k == 1) ans = dp[n];else {for (LL i = k; i >= 2; i--)ans = ans * i % q;ans = ans * (dp[n - k] + (k + 1) * (n - k) % q - 1) % q;}printf("Case #%d: %lld\n", v, ans % q);}return 0;
}

AC的C++语言程序:

#include<iostream>
using namespace std;
typedef long long ll;
ll dp[55][55];ll get(int k,int mod)
{int b = k;ll res = 1;while(b){res = (res * b) % mod;b--;}return res;
}int main()
{int t,n,k,q;//dp[1][1] = dp[1][0] = 1;cin>>t;for(int test = 1;test <= t;++test){cin>>n>>k>>q;for(int i = 2;i <= n;++i)dp[i][1] = (dp[i - 1][1] + 2 * i - 3) % q;if(k > n - 1) k = n - 1;dp[n][k] = (get(k,q) * (dp[n - k][1] + (k + 1) * (n - k) % q - 1) % q) % q;cout<<"Case #"<<test<<": "<<dp[n][k]<<endl;}return 0;
}

D. Diameter of a Tree

E. The Kouga Ninja Scrolls

F. Counting Sheep in Ami Dongsuo

G. Best ACMer Solves the Hardest Problem

AC的C++语言程序:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;const int maxv = 1e7 + 10;
const int maxn = 6006;
int n, m;
typedef pair<int, int> pp;
vector<pp >v[maxv],cc;
int mp[maxn][maxn];
ll lastans;
int poww[maxv];
set<pair<int,int> >cnt;
set<pair<int,int> >::iterator it;
int dir[4][2]= {{1, 1}, {1, -1}, {-1, 1}, {-1, -1}};void init() {for(int i = 0; i <= 6000; i++) {for(int j = 0; j <= 6000; j++) {if(i * i + j * j <= 1e7) {v[i * i + j * j].push_back(make_pair(i, j));} elsecontinue;}}
}int judge(int x,int y) {if(x <= 0 || y <= 0 || x > 6000 || y > 6000)return 0;return 1;
}int main() {init();int t;scanf("%d", &t);for(int cas = 1; cas <= t; cas++) {cc.clear();printf("Case #%d:\n", cas);lastans = 0;scanf("%d %d", &n, &m);for(int i = 1; i <= n; i++) {int x, y, w;scanf("%d %d %d", &x, &y, &w);mp[x][y] = w;cc.push_back(make_pair(x, y));}for(int qq = 1; qq <= m; qq++) {int op, x, y, w, k;scanf("%d", &op);if(op == 1) {scanf("%d %d %d", &x, &y, &w);x = (x + lastans) % 6000 + 1;y = (y + lastans) % 6000 + 1;mp[x][y] = w;cc.push_back(make_pair(x, y));} else if(op == 2) {scanf("%d %d", &x, &y);x = (x + lastans) % 6000 + 1;y = (y + lastans) % 6000 + 1;mp[x][y] = 0;} else if(op == 3) {scanf("%d %d %d %d",&x, &y, &k, &w);x = (x + lastans) % 6000 + 1;y = (y + lastans) % 6000 + 1;cnt.clear();for(int i = 0; i < v[k].size(); i++) {int xx = v[k][i].first;int yy = v[k][i].second;for(int j = 0; j <= 3; j++) {int nx = xx * dir[j][0] + x;int ny = yy * dir[j][1] + y;if(judge(nx, ny) && mp[nx][ny] != 0) {cnt.insert(make_pair(nx, ny));}}}for(set<pp> :: iterator it = cnt.begin(); it != cnt.end(); it++) {mp[it -> first][it -> second] += w;}} else {scanf("%d %d %d", &x, &y, &k);x = (x + lastans) % 6000 + 1;y = (y + lastans) % 6000 + 1;cnt.clear();for(int i = 0; i < v[k].size(); i++) {int xx = v[k][i].first;int yy = v[k][i].second;for(int j = 0; j <= 3; j++) {int nx = xx * dir[j][0] + x;int ny = yy * dir[j][1] + y;if(judge(nx, ny) && mp[nx][ny] != -1) {cnt.insert(make_pair(nx, ny));}}}ll ans = 0;for(set<pp>::iterator it = cnt.begin(); it != cnt.end(); it++) {ans += mp[it ->first][it->second];}lastans=ans;printf("%lld\n",ans);}}for(int i = 0; i < cc.size(); i++) {mp[cc[i].first][cc[i].second] = 0;}}return 0;
}

AC的C++语言程序:

#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include <map>
#include <set>using namespace std;typedef long long LL;
const int LIM = 6010;
const int SIZE = 10000001;
int wei[LIM][LIM];
int valid[LIM][LIM];
vector<pair<int, int>> crease[SIZE];
int dir[2][4] = {1, 1, -1, -1, 1, -1, 1, -1};
// 不要每次都memset会超时
int main(void) {LL lastAns;int t, n, m, x, y, w, op, k, cur, nx, ny;scanf("%d", &t);for (int i = 0; i <= 6000; i++)for (int j = 0; j <= 6000; j++)if ((cur = i * i + j * j) < SIZE)crease[cur].push_back(make_pair(i, j));for (int v = 1; v <= t; v++) {// initprintf("Case #%d:\n", v);lastAns = 0;scanf("%d%d", &n, &m);for (int i = 0; i < n; i++) {scanf("%d%d%d", &x, &y, &w);wei[x][y] = w;valid[x][y] = v;}set<int> vis;while (m--) {scanf("%d%d%d", &op, &x, &y);x = (x + lastAns) % 6000 + 1;y = (y + lastAns) % 6000 + 1;switch (op) {case 1:scanf("%d", &w);wei[x][y] = w;valid[x][y] = v;break;case 2:valid[x][y] = 0;break;case 3:vis.clear();scanf("%d%d", &k, &w);for (auto ite : crease[k]) {for (int i = 0; i < 4; i++) {nx = x + ite.first * dir[0][i];ny = y + ite.second * dir[1][i];if (nx >= 0 && nx <= 6000 && ny >= 0 && ny <= 6000&& valid[nx][ny] == v && !vis.count(cur = nx * 6001 + ny))wei[nx][ny] += w, vis.insert(cur);}}break;case 4:vis.clear();scanf("%d", &k);LL ans = 0;for (auto ite : crease[k]) {for (int i = 0; i < 4; i++) {nx = x + ite.first * dir[0][i];ny = y + ite.second * dir[1][i];// printf("x = %d, y = %d\n", nx, ny);if (nx >= 0 && nx <= 6000 && ny >= 0 && ny <= 6000&& valid[nx][ny] == v && !vis.count(cur = nx * 6001 + ny))ans += wei[nx][ny], vis.insert(cur);}}lastAns = ans;printf("%lld\n", ans);break;}}}return 0;
}

H. Rainbow Graph

I. Distance Between Sweethearts

J. How Much Memory Your Code Is Using?

AC的C++语言程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
int main(){int n,t;
//  freopen("memory your code is using.txt","r",stdin);string name,typ;ios::sync_with_stdio(false);cin>>t;for(int kase=1;kase<=t;++kase){cin>>n;
//      cout<<n<<endl;long long men=0;for(int i=0;i<n;++i){cin>>typ;cin>>name;//                             cout<<typ<<endl<<name<<endl;if(typ=="long"){if(name=="long") typ="ll";else if(name=="double") typ="ld";cin>>name;}long long num=0;for(int i=0;i<name.length();++i){if(name[i]=='['){++i;while(name[i]>='0' && name[i]<='9')num=num*10+name[i]-48,++i;}}if(!num) num=1;if(typ=="char" || typ=="bool") men+=num*1;else if(typ=="int"  || typ=="float" )men+=num*4;else if(typ=="ll" || typ=="double")men+=num*8;else if(typ=="__int128" || typ=="ld")men+=num*16;}men =!(men%1024) ? men/1024 : men/1024+1 ; printf("Case #%d: %d\n",kase,men);}
}

AC的C++语言程序:

#include <iostream>
#include <string>using namespace std;typedef long long LL;/*intboolcharfloatdouble__int128long doublelong long
*
*/inline int getCnt(const string &s) {int i = 0;for (; i < s.size() && s[i] != '['; i++);if (i == s.size()) return 1;int ret = 0;for (i++; i < s.size() && s[i] != ']'; i++) {ret = ret * 10 + s[i] - '0';}return ret;
}int main(void) {ios::sync_with_stdio(false);cin.tie(NULL);string str, var;int n, t, cnt;cin >> t;for (int k = 1; k <= t; k++) {cin >> n;LL ans = 0;while (n--) {cin >> str;if (str == "long") {cin >> str >> var;cnt = getCnt(var);switch (str[0]) {case 'l':ans += cnt * 8;break;case 'd':ans += cnt * 16;break;}} else {cin >> var;cnt = getCnt(var);switch (str[0]) {case 'i':ans += 4 * cnt;break;case 'b':ans += cnt;break;case 'c':ans += cnt;break;case 'f':ans += 4 * cnt;break;case 'd':ans += 8 * cnt;break;case '_':ans += 16 * cnt;break;}}}cout << "Case #" << k << ": " << (ans + 1023) / 1024 << '\n';}return 0;
}

AC的C++语言程序:

#include<bits/stdc++.h>
using namespace std;
int main() {int kase = 0;int T;cin >> T;while( T-- ) {int n;int ans = 0;int num;cin >> n;getchar();for(int i = 0; i < n; i++) {string s;int tmp;getline(cin, s);//cout<<s<<endlstring str = s;if(s[0] == 'b') tmp = 1;else if(s[0] == 'c') tmp = 1;else if(s[0] == 'i') tmp = 4;else if(s[0] == 'd') tmp = 8;else if(s[0] == 'f') tmp = 4;else if(s[0] == '_') tmp = 16;else if(s[0] == 'l') {if(s[5]=='l')tmp=8;else if(s[5]=='d')tmp=16;}int loc1 = str.find("[");num = 0;if(loc1 != -1) {int loc2 = str.find("]");for(int i = loc1 + 1; i < loc2; i++) {num = num * 10 + s[i] - '0';}}if(num) tmp *= num;ans += tmp;}ans = ceil((double)ans/1024);cout << "Case #" << ++kase << ": " << ans << endl;}return 0;
}

AC的C++语言程序:

#include<bits/stdc++.h>using namespace std;map<string,int> mp;inline void init(){mp.insert(make_pair("bool",1));mp.insert(make_pair("char",1));mp.insert(make_pair("int",4));mp.insert(make_pair("float",4));mp.insert(make_pair("long long",8));mp.insert(make_pair("double",8));mp.insert(make_pair("long double",16));mp.insert(make_pair("__int128",16));
}int main(){//    freopen("in.txt","r",stdin);int T;
//    ios::sync_with_stdio(false);cin>>T;init();for(int cs=1;cs<=T;cs++){int n;cin>>n;cin.ignore();string s;long long sum=0;while(n--){getline(cin,s);int id=s.find_last_of(" ");string ss=s.substr(0,id);if((id=s.find('['))!=string::npos){string sss=s.substr(id+1);long long num=0;for(int i=0;sss[i]!=']';i++){num=num*10+sss[i]-'0';}sum+=num*mp[ss];}else{sum+=mp[ss];}}cout<<"Case #"<<cs<<": "<<(sum-1)/1024+1<<endl;}return 0;
}

AC的C++语言程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
const int tran=1024;
int f(string str)
{int len=str.size();int flag=0;int j,s_num=0;for(int i=0;i<len;i++){if(str[i]==';') break;if(str[i]=='['){flag=1; for(j=i+1;;j++){if(str[j]==']') break;s_num=s_num*10+str[j]-'0';}i=j+1;} }if(!flag) return 1;else return s_num;
}
int main()
{int t,cnt=0,n;scanf("%d",&t);string str;while(t--){scanf("%d",&n);getchar();long long num=0;//字节 while(n--){getline(cin,str);int len=str.size();if(str[0]=='b'||str[0]=='c')//bool 一字节 {num+=f(str); }else if(str[0]=='i'||str[0]=='f'){num+=4*f(str);//    cout<<num<<endl;}else if(str[0]=='d'){num+=8*f(str);}else if(str[0]=='_'){num+=16*f(str);}else if(str[0]=='l'){if(str[5]=='d'){//long double  想用  substr   判断double 结果不对emm num+=16*f(str);}else{num+=8*f(str);}}//cout<<num<<endl;}//cout<<num<<endl;int ans;if(num%tran==0) ans=num/tran;else ans=1+num/tran; printf("Case #%d: %d\n",++cnt,ans);}return 0;
}

K. Let the Flames Begin

AC的C++语言程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
int main()
{int T,kase=0;ll n,m,k;scanf("%lld",&T);while(T--){scanf("%lld%lld%lld",&n,&m,&k);printf("Case #%d: ",++kase);if(n==1){printf("1\n");continue;}if(k==1){printf("%lld\n",m);continue;}ll sum=n-m+1;ll ans=(sum+k-1)%sum;while(sum<n){if(m>k){ll t=sum-ans;t/=k;t=min(n-sum,t);sum+=t;ans=(ans+t*k)%sum;if(sum==n) break;}sum++;ans=(ans+k)%sum;if(sum==n) break;//cout<<sum<<endl;}printf("%lld\n",ans+1);}return 0;
}

AC的C++语言程序:

#include <iostream>
#include <cmath>using namespace std;typedef long long LL;
// m小直接推,k小按k推,一圈都转不完不用推
int main(void) {LL n, m, k;int t;scanf("%d", &t);for (int w = 1; w <= t; w++) {scanf("%lld%lld%lld", &n, &m, &k);if (k == 1) {printf("Case #%d: %lld\n", w, m * k);continue;}LL tn, tm, fcrt;tn = n - m + 1, tm = 1;fcrt = (k - 1) % tn;if (m > k) {LL t;while (tm < m) {t = min((tn - fcrt) / k + 1, m - tm);// printf("tm = %lld, tn = %lld, (tn - fcrt) / k + 1 = %lld, m - tm = %lld, t is %lld\n", tm, tn, (tn - fcrt) / k + 1, m - tm, t);tm += t, tn += t;fcrt = (fcrt + t * k) % tn;}fcrt++;} else {while (tm < m) {tn++, tm++;fcrt = (fcrt + k) % tn;}fcrt++;}printf("Case #%d: %lld\n", w, fcrt);}return 0;
}

L. Machining Disc Rotors

M. Renaissance Past in Nancy

2018-2019 ACM-ICPC, Asia Shenyang Regional Contest题解相关推荐

  1. 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...

  2. 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A .(2017 ACM ICPC dalian H)To begin or not to be ...

  3. 2018 ACM-ICPC Asia Shenyang Regional Contest 题解(9 / 13)【每日亿题2021/2/24】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2018 ACM-ICPC Shenyang J)How Much Memory Your ...

  4. The 2019 ICPC Asia Shanghai Regional Contest

    The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...

  5. 2018 ICPC Asia Jakarta Regional Contest

    2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...

  6. The 2020 ICPC Asia Shenyang Regional Programming Contest I题 Rise of Shadows(数论)

    题目链接The 2020 ICPC Asia Shenyang Regional Programming Contest 题目大意: 一天内有H小时,每小时M分钟,时针分针以恒定速率旋转. 现在若时针 ...

  7. 【题目记录】——The 2021 ICPC Asia Jinan Regional Contest

    文章目录 C Optimal Strategy 组合数 H Game Coin K Search For Mafuyu 欧拉序列 题目集地址 The 2021 ICPC Asia Jinan Regi ...

  8. 2018-2019 ACM-ICPC, Asia Nanjing Regional Contest题解

    以下所有AC题解程序来自"仙客传奇"团队. AC题数:6/13 ADGIJK A. Adrien and Austin AC的C++语言程序: #include <iostr ...

  9. 2018 ACM-ICPC Asia Beijing Regional Contest题解

    以下所有AC题解程序来自"仙客传奇"团队. A. Jin Yong's Wukong Ranking List AC的C++语言程序: #include <iostream& ...

最新文章

  1. 【转载】基于AFNetWorking3.0的图片缓存分析
  2. 二维数组删除_「leetcode」数组:总结篇!(一文搞懂数组题目)
  3. 玩转oracle 11g(5):表空间的作用
  4. LVS——TUN隧道模式(负载均衡)
  5. easyui省市二级联动
  6. 详解全局免流原理(转载)
  7. pandas DataFrame 分组求和
  8. 计算机打印错误,打印机错误正在打印处理方法,教您电脑打印机错误正在打印处理方法...
  9. 从某付宝获取的省市区数据处理成value label children结构
  10. font-family常用字体集合
  11. CSS实现折角样式效果
  12. 两个按键控制CC2530单片机LED的亮灭
  13. 爬虫-用xpath爬取豆瓣图书的短评
  14. 山东省智慧城市产业技术创新战略联盟成立
  15. “2020(第二届)中国食品供应链大会”于8月27-28日在湖南长沙召开
  16. React —— Descriptions(根据自己需求判断要显示哪些)
  17. 分解三范式和BC范式
  18. 16世纪的旷世奇才:大学弃医丛数,仅用20年就独立发明了温度计、军事罗盘、天文望远镜,后半生双目失明还能写出惊人科学著作
  19. 基于深度学习lstm_基于LSTM的深度恶意软件分析
  20. van-grid引入自定义图标无效,图标加载不出来

热门文章

  1. GIS制图人员的自我修养(2)--制图意识
  2. 手机横版动作类游戏的开发思路
  3. windows下cocos2d-x android打包
  4. Windows环境下Android NDK环境搭建
  5. 八款开源Android 游戏引擎介绍
  6. python带参数的装饰器的作用_Python带参数的装饰器运行原理解析
  7. SparkContext详述
  8. Hive insert into小文件问题优化解决
  9. 机器学习代码实战——K折交叉验证(K Fold Cross Validation)
  10. linux卸载apk命令,apk的安装和卸载 - Jenly的个人空间 - OSCHINA - 中文开源技术交流社区...