わー
自分で解いたよ、多分
2436
#include <cstdio> #include <cstring> #define max(a,b) (a)>(b)?(a):(b) int n, d, k; int cow[1000][15]; bool ok[1000]; int main() { scanf("%d%d%d",&n,&d,&k); for (int i=0; i<n; i++) { int di; scanf("%d",&di); for (int j=0; j<di; j++) { int dis; scanf("%d",&dis); cow[i][dis-1]=1; } } int res=0; for (int i=0; i<(1<<d); i++) { if (__builtin_popcount(i)>k) continue; memset(ok, 0, sizeof(ok)); for (int j=0; j<d; j++) { if ((i>>j)&1) continue; for (int k=0; k<n; k++) if (cow[k][j]) ok[k]=true; } int cnt=0; for (int j=0; j<n; j++) if (!ok[j]) cnt++; res=max(res,cnt); } printf("%d\n",res); }
2376
#include <cstdio> #include <algorithm> using namespace std; struct shift { int s, e; }; bool comp(const shift& s1, const shift& s2) { // if (s1.s==s2.s) return s1.e>s2.e; return s1.s < s2.s; } shift ss[25000]; int main() { int n, t; scanf("%d%d",&n,&t); for (int i=0; i<n; i++) { scanf("%d%d",&ss[i].s,&ss[i].e); } sort(ss,ss+n,comp); int to=0, from=1, res=0, i=0; bool update; while (true) { update=false; for (; i<n&&ss[i].s<=from; i++) { to=max(to, ss[i].e); update=true; } res++; if (to>=t) { printf("%d\n",res); break; } if (i==n||!update) { puts("-1"); break; } from=to+1; } }
2371
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int n, k; string emp; int data[100000]; int main() { scanf("%d",&n); for (int i=0; i<n; i++) scanf("%d",&data[i]); sort(data, data+n); cin>>emp; scanf("%d",&k); for (int i=0; i<k; i++) { int s; scanf("%d",&s); printf("%d\n",data[s-1]); } }
2378
#include <cstdio> #include <cstring> #include <vector> #include <set> using namespace std; int n, x, y; bool used[100000]; vector<int> G[10000]; set<int> res; int dfs(int np) { int ret=1; int csv=0; used[np]=true; for (int i=0; i<G[np].size(); i++) { if (used[G[np][i]]) continue; int tmp=dfs(G[np][i]); csv=max(csv, tmp); ret+=tmp; } csv=max(csv, n-ret); if (csv<=n/2) res.insert(np+1); return ret; } int main() { scanf("%d",&n); for (int i=0; i<n-1; i++) { scanf("%d%d",&x,&y); G[x-1].push_back(y-1); G[y-1].push_back(x-1); } memset(used, 0, sizeof(used)); dfs(0); if (res.size()==0) puts("NONE"); else { for (set<int>::iterator i=res.begin(); i!=res.end(); i++) { printf("%d\n",*i); } } }
3050
#include <cstdio> #include <set> using namespace std; int mp[5][5]; set<int> res; int dx[4]={1,-1,0,0}; int dy[4]={0,0,1,-1}; int t[6]={100000, 10000, 1000, 100, 10, 1}; void dfs(int x, int y, int v, int cnt) { v+=mp[x][y]*t[cnt]; if (cnt==5) { res.insert(v); return; } for (int i=0; i<4; i++) { int nx=x+dx[i], ny=y+dy[i]; if (nx<0||nx>4||ny<0||ny>4) continue; dfs(nx,ny,v,cnt+1); } return; } int main() { for (int i=0; i<5; i++) for (int j=0; j<5; j++) scanf("%d",&mp[i][j]); for (int i=0; i<5; i++) for (int j=0; j<5; j++) dfs(i,j,0,0); printf("%d\n",res.size()); }
A
やるだけ
#include <cstdio> #include <map> #include <set> using namespace std; typedef pair<int, int> P; int n, m; set<P> ans; int main() { scanf("%d%d",&n,&m); for (int i=0; i<=1000; i++) { for (int j=0; j<=1000; j++) { if (i*i+j==n&&i+j*j==m) ans.insert(P(i,j)); } } printf("%d\n",ans.size()); }
B
2が二個で余り1を見逃してた…
#include <cstdio> #include <algorithm> using namespace std; int n, dig[100000]; int main() { bool flag=false; scanf("%d",&n); int sum=0; for (int i=0; i<n; i++) { scanf("%d",&dig[i]); sum+=dig[i]; if (dig[i]==0) flag=true; } if (!flag) { puts("-1"); return 0; } sort(dig, dig+n); if (dig[n-1]==0) puts("0"); else { if (sum%3==0) { for (int i=n-1; i>=0; i--) printf("%d",dig[i]); puts(""); } else if (sum%3==1) { int a=-1; for (int i=0; i<n; i++) { if (dig[i]%3==sum%3) { a=dig[i]; break; } } if (a==-1) { int cnt=0; for (int i=0; i<n&&cnt<2; i++) { if (dig[i]%3==2) { dig[i]=-1; cnt++; } } } else { for (int i=0; i<n; i++) { if (dig[i]==a) { dig[i]=-1; break; } } } flag=false; for (int i=0; i<n; i++) { if (dig[i]!=0&&dig[i]!=-1) flag=true; } if (!flag) puts("0"); else { for (int i=n-1; i>=0; i--) if (dig[i]!=-1) printf("%d",dig[i]); puts(""); } } else { int a=-1; for (int i=0; i<n; i++) { if (dig[i]%3==sum%3) { a=dig[i]; break; } } if (a==-1) { int cnt=0; for (int i=0; i<n&&cnt<2; i++) { if (dig[i]%3==1) { dig[i]=-1; cnt++; } } } else { for (int i=0; i<n; i++) { if (dig[i]==a) { dig[i]=-1; break; } } } flag=false; for (int i=0; i<n; i++) { if (dig[i]!=0&&dig[i]!=-1) flag=true; } if (!flag) puts("0"); else { for (int i=n-1; i>=0; i--) if (dig[i]!=-1) printf("%d",dig[i]); puts(""); } } } }
レート上がったよ!+8(しろめ)